|
50 | 50 | `''''`'''i==_+=_=i__ |
51 | 51 | ||'''- ' `. |
52 | 52 | `-.......-'' |
53 | | -*/ |
54 | | -#include<bits/stdc++.h> |
| 53 | +*/ |
| 54 | +#include <bits/stdc++.h> |
55 | 55 | using namespace std; |
56 | | - |
57 | | -#define fastio ios_base::sync_with_stdio(0); cin.tie(0) |
58 | | -#define LL long long |
59 | | -#define mod 998244353 |
60 | | -#define FOR(i, j, k) for (int i=j ; i<k ; i++) |
61 | | -#define ROF(i, j, k) for (int i=j ; i>=k ; i--) |
62 | | - |
63 | | -const long long INF = 1e18; |
64 | | -const long long MAX = 1e5+10; |
65 | | - |
66 | | -int main(){ |
67 | | - fastio; |
68 | | - int t=1; //cin>>t; |
69 | | - while(t--){ |
70 | | - int m; string s; cin>>s>>m; |
71 | | - std::vector<int> v; FOR(i,0,s.size()) if(s[i]=='1') v.push_back(i+1); |
72 | | - LL prev = 0; |
73 | | - std::vector<int> res; |
74 | | - FOR(j,0,v.size()){ |
75 | | - std::vector<int> ans; ans.push_back(v[j]); LL l=v[j],r=0; prev=v[j]; //cout<<j<<"; "; |
76 | | - FOR(i,1,m){ |
77 | | - int diff = abs(l-r); |
78 | | - auto it = upper_bound(v.begin(), v.end(),diff); |
79 | | - if(it!=v.end() && *it==prev) it = upper_bound(v.begin(), v.end(),prev); |
80 | 56 |
|
81 | | - if(it==v.end()) break ;//{cout<<"NO"; return 0;} |
82 | | - if(i&1) r+=*it; |
83 | | - else l+=*it; |
84 | | - ans.push_back(*it); prev = *it; |
85 | | - } |
86 | | - if(ans.size()==m) {res=ans;break;} |
87 | | - } |
88 | | - if(res.size()!=m) {cout<<"NO\n"; return 0;} |
| 57 | +#define fastio \ |
| 58 | + ios_base::sync_with_stdio(0); \ |
| 59 | + cin.tie(0) |
| 60 | +#define LL long long |
| 61 | +#define mod 998244353 |
| 62 | +#define FOR(i, j, k) for (auto i = j; i < k; i++) |
| 63 | +#define ROF(i, j, k) for (auto i = j; i >= k; i--) |
89 | 64 |
|
90 | | - cout<<"YES\n"; |
91 | | - for(auto i : res) std::cout<<i<<" "; |
| 65 | +const long long INF = 1e18; |
| 66 | +const long long MAX = 1e5 + 10; |
| 67 | +bool pos = false; |
| 68 | +int m; |
| 69 | +void f(vector<int> &v, int x, int j, vector<int> p) |
| 70 | +{ |
| 71 | + if (j == m && !pos) |
| 72 | + { |
| 73 | + pos = true; |
| 74 | + cout << "YES\n"; |
| 75 | + for (auto i : p) |
| 76 | + cout << i << " "; |
| 77 | + } |
| 78 | + if (pos || j > m) |
| 79 | + return; |
| 80 | + auto it = upper_bound(v.begin(), v.end(), abs(x)); |
| 81 | + FOR(i, it, v.end()) |
| 82 | + { |
| 83 | + vector<int> temp = p; |
| 84 | + if (temp.size() == 0) |
| 85 | + { |
| 86 | + temp.push_back(*i), f(v, x + *i, j + 1, temp); |
| 87 | + continue; |
92 | 88 | } |
| 89 | + if ((j & 1) && (*i != *temp.rbegin())) |
| 90 | + temp.push_back(*i), f(v, x - *i, j + 1, temp); |
| 91 | + else if ((*i != *temp.rbegin()) && (j % 2 == 0)) |
| 92 | + temp.push_back(*i), f(v, x + *i, j + 1, temp); |
| 93 | + } |
| 94 | + |
| 95 | +} |
| 96 | +int main() |
| 97 | +{ |
| 98 | + fastio; |
| 99 | + int t = 1; //cin>>t; |
| 100 | + while (t--) |
| 101 | + { |
| 102 | + string s; |
| 103 | + cin >> s >> m; |
| 104 | + std::vector<int> v; |
| 105 | + FOR(i, 0, s.size()) |
| 106 | + if (s[i] == '1') |
| 107 | + v.push_back(i + 1); |
| 108 | + vector<int> p; |
| 109 | + f(v, 0, 0, p); |
| 110 | + if (!pos) |
| 111 | + cout << "NO"; |
| 112 | + } |
93 | 113 | } |
0 commit comments