Skip to content

Commit 11f92f5

Browse files
committed
at last 339C
1 parent 9dd97a2 commit 11f92f5

2 files changed

Lines changed: 56 additions & 36 deletions

File tree

339C.cpp

Lines changed: 56 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -50,44 +50,64 @@
5050
`''''`'''i==_+=_=i__
5151
||'''- ' `.
5252
`-.......-''
53-
*/
54-
#include<bits/stdc++.h>
53+
*/
54+
#include <bits/stdc++.h>
5555
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);
8056

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--)
8964

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;
9288
}
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+
}
93113
}

a.out

23.3 KB
Binary file not shown.

0 commit comments

Comments
 (0)