Skip to content

Commit 0cd7765

Browse files
committed
change pC
1 parent 5fab8eb commit 0cd7765

14 files changed

Lines changed: 228 additions & 158 deletions

File tree

pC/checker/checker.cpp

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,51 @@ int main(int argc, char* argv[]) {
66
registerTestlibCmd(argc, argv);
77
// about testlib, see https://codeforces.com/blog/entry/18291
88
bool ok = true;
9-
int n = ouf.readInt();
10-
int len = inf.readInt();
9+
int t = inf.readInt();
1110
inf.readEoln();
12-
string anss = inf.readString();
13-
if(anss.back() == '\n') anss.pop_back();
14-
if(n == -1) {
15-
int b = ans.readInt();
16-
if(b != -1) {
17-
ok = false;
18-
}
19-
ans.readEoln();
20-
ouf.readEoln();
21-
}else if(0 <= n && n <= 100000000){
22-
ouf.readEoln();
23-
string s(len, '0');
24-
for(int i = 0; i < n; i++) {
25-
int p = ouf.readInt();
11+
while(t--) {
12+
int n = ouf.readInt();
2613
ouf.readEoln();
27-
if(p == 1) {
28-
s[0] = !((bool)(s[1] - '0')) + '0';
29-
}else if(p == len) {
30-
s[len-1] = !((bool)(s[len-2] - '0')) + '0';
31-
}else if( len > p && p > 1) {
32-
s[p-1] = !((bool)(s[p-2] - '0')^(bool)(s[p] - '0')) +'0';
33-
}else{
34-
ok = false;
35-
break;
14+
int b = ans.readInt();
15+
ans.readEoln();
16+
while(b>0){
17+
ans.readInt();
18+
ans.readEoln();
19+
b--;
3620
}
37-
}
38-
if(s != anss) ok = false;
39-
}else ok = false;
21+
int len = inf.readInt();
22+
inf.readEoln();
23+
string anss = inf.readToken();
24+
inf.readEoln();
25+
if(n == -1) {
26+
if(b != -1) {
27+
ok = false;
28+
break;
29+
}
30+
}else if(0 <= n && n <= 100000000){
31+
string s(len, '0');
32+
for(int i = 0; i < n; i++) {
33+
int p = ouf.readInt();
34+
ouf.readEoln();
35+
if(p<=0 || p>len) {
36+
ok = false;
37+
break;
38+
}
39+
if(p == 1) {
40+
s[0] = !((bool)(s[1] - '0')) + '0';
41+
}else if(p == len) {
42+
s[len-1] = !((bool)(s[len-2] - '0')) + '0';
43+
}else if( len > p && p > 1) {
44+
s[p-1] = !((bool)(s[p-2] - '0')^(bool)(s[p] - '0')) +'0';
45+
}else{
46+
ok = false;
47+
break;
48+
}
49+
}
50+
if(s != anss) ok = false;
51+
}else ok = false;
52+
if(!ok) break;
53+
}
4054
quit(ok ? _ok : _wa);
4155
return 0;
4256
}

pC/gen/data

Lines changed: 33 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,9 @@ manual example-2.in
66
manual example-3.in
77

88
@subtask sn
9-
gen 2 0 0 0 1
10-
gen 2 0 1 0 2
11-
gen 2 0 2 0 3
12-
gen 2 0 3 0 4
13-
gen 3 0 0 0 5
14-
gen 3 0 1 0 6
15-
gen 3 0 2 0 7
16-
gen 3 0 3 0 8
17-
gen 3 0 4 0 9
18-
gen 3 0 5 0 10
19-
gen 3 0 6 0 11
20-
gen 3 0 7 0 12
21-
gen 4 0 0 0 13
22-
gen 4 0 1 0 14
23-
gen 4 0 2 0 15
24-
gen 4 0 3 0 16
25-
gen 4 0 4 0 17
26-
gen 4 0 5 0 18
27-
gen 4 0 6 0 19
28-
gen 4 0 7 0 20
29-
gen 4 0 8 0 21
30-
gen 4 0 9 0 22
31-
gen 4 0 10 0 23
32-
gen 4 0 11 0 24
33-
gen 4 0 12 0 25
34-
gen 4 0 13 0 26
35-
gen 4 0 14 0 27
36-
gen 4 0 15 0 28
9+
gen 2 0 87 0 1
10+
gen 3 0 87 0 2
11+
gen 4 0 87 0 3
3712

3813
@subtask zo
3914
gen 1000000 0 87 1 1
@@ -54,18 +29,33 @@ gen 1000000 0 87 1 15
5429

5530

5631
@subtask full
57-
gen 1000000 1 87 0 1
58-
gen 1000000 1 87 0 2
59-
gen 1000000 1 87 0 3
60-
gen 1000000 1 87 0 4
61-
gen 1000000 1 87 0 5
62-
gen 1000000 0 87 0 6
63-
gen 1000000 0 87 0 7
64-
gen 1000000 0 87 0 8
65-
gen 1000000 0 87 0 9
66-
gen 1000000 0 87 0 10
67-
gen 1000000 0 87 0 11
68-
gen 1000000 0 87 0 12
69-
gen 1000000 0 87 0 13
70-
gen 1000000 0 87 0 14
71-
gen 1000000 0 87 0 15
32+
gen 5 0 87 0 1
33+
gen 6 0 87 0 2
34+
gen 7 0 87 0 3
35+
gen 8 0 87 0 4
36+
gen 9 0 87 0 5
37+
gen 10 0 87 0 6
38+
gen 11 0 87 0 7
39+
gen 12 0 87 0 8
40+
gen 13 0 87 0 9
41+
gen 14 0 87 0 10
42+
gen 15 0 87 0 11
43+
gen 16 0 87 1 12
44+
gen 16 0 87 2 13
45+
gen 1000000 1 87 0 14
46+
gen 1000000 1 87 0 15
47+
gen 1000000 1 87 0 16
48+
gen 1000000 1 87 0 17
49+
gen 1000000 1 87 0 18
50+
gen 1000000 0 87 0 19
51+
gen 1000000 0 87 0 20
52+
gen 1000000 0 87 0 21
53+
gen 1000000 0 87 0 22
54+
gen 1000000 0 87 0 23
55+
gen 1000000 0 87 0 24
56+
gen 1000000 0 87 0 25
57+
gen 1000000 0 87 0 26
58+
gen 1000000 0 87 0 27
59+
gen 1000000 0 87 0 28
60+
manual big.in
61+
manual big2.in

pC/gen/gen.cpp

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,41 @@ int main(int argc, char* argv[]) {
1111
int num = atoi(argv[3]);
1212
bool diff = atoi(argv[4]);
1313

14-
if(max_n == 2) {
15-
cout << 2 << '\n';
16-
cout << bitset<2>(num) << '\n';
17-
}else if(max_n == 3) {
18-
cout << 3 << '\n';
19-
cout << bitset<3>(num) << '\n';
20-
}else if(max_n == 4) {
21-
cout << 4 << '\n';
22-
cout << bitset<4>(num) << '\n';
14+
if(max_n == 16) {
15+
if(num==1) {
16+
cout << (1<<15) <<'\n';
17+
for(int i = 0; i < (1<<15); i++) {
18+
cout << max_n << '\n';
19+
for(int j = 0; j < max_n; j++) {
20+
if((i>>j)&1) cout<<1;
21+
else cout<<0;
22+
}
23+
cout<<'\n';
24+
}
25+
}else{
26+
cout << (1<<15) << '\n';
27+
for(int i = (1<<15); i < (1<<16); i++) {
28+
cout << max_n << '\n';
29+
for(int j=0;j<max_n;j++) {
30+
if((i>>j)&1) cout<<1;
31+
else cout<<0;
32+
}
33+
cout<<'\n';
34+
}
35+
}
36+
}else if(max_n <= 15) {
37+
cout << (1<<max_n) << '\n';
38+
for(int i = 0; i < (1<<max_n); i++) {
39+
cout<<max_n<<'\n';
40+
for(int j = 0; j < max_n; j++) {
41+
if((i>>j)&1) cout<<1;
42+
else cout<<0;
43+
}
44+
cout<<'\n';
45+
}
2346
}else if(no) {
24-
int n = rnd.next(2, max_n);
47+
cout<<1<<'\n';
48+
int n = rnd.next(max_n/2, max_n);
2549
n = min( n / 3 * 3 + 2, 999998);
2650
cout << n << '\n';
2751
for(int i = 0; i < n; i++) {
@@ -30,7 +54,8 @@ int main(int argc, char* argv[]) {
3054
}
3155
cout << '\n';
3256
}else if(diff) {
33-
int n = rnd.next(2, max_n);
57+
cout<<1<<'\n';
58+
int n = rnd.next(max_n/2, max_n);
3459
cout << n << '\n';
3560
int fir = rnd.next(0, 1);
3661
for(int i = 0; i < n; i++) {
@@ -39,7 +64,8 @@ int main(int argc, char* argv[]) {
3964
}
4065
cout << '\n';
4166
}else {
42-
int n = rnd.next(2, max_n);
67+
cout << 1 <<'\n';
68+
int n = rnd.next(max_n/2, max_n);
4369
cout << n << '\n';
4470
for(int i = 0; i < n; i++) {
4571
cout << rnd.next(0, 1);

pC/gen/manual/big.in

Lines changed: 3 additions & 0 deletions
Large diffs are not rendered by default.

pC/gen/manual/big2.in

Lines changed: 3 additions & 0 deletions
Large diffs are not rendered by default.

pC/gen/manual/example-1.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
1
12
6
23
011010

pC/gen/manual/example-2.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
1
12
2
23
11

pC/gen/manual/example-3.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,7 @@
1+
3
2+
7
3+
1001010
14
14
25
11010000111001
6+
11
7+
10100100111

pC/gen/manual/prin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
print(1)
2+
print(1000000)
3+
print("1100"*250000)

pC/solution/correct.cpp

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,27 +31,30 @@ bool check(string s) {
3131
int main() {
3232
ios::sync_with_stdio(0);
3333
cin.tie(0);
34+
int n, t;
3435
stack<int> ans;
35-
int n;
3636
string s;
37-
cin >> n >> s;
38-
s = '0' + s + '0';
39-
for(int i = 0; i < s.length() - 3; i++) {
40-
auto [res, tmp] = to_zero(s.substr(i, 4), i);
41-
for(int& j : tmp) ans.push(j);
42-
for(int j = 0; j < 4; j++) s[i+j] = res[j];
37+
cin >> t;
38+
while(t--) {
39+
cin >> n >> s;
40+
s = '0' + s + '0';
41+
for(int i = 0; i < s.length() - 3; i++) {
42+
auto [res, tmp] = to_zero(s.substr(i, 4), i);
43+
for(int& j : tmp) ans.push(j);
44+
for(int j = 0; j < 4; j++) s[i+j] = res[j];
45+
}
46+
for(int i = s.length() - 4; i >= 0; i--) {
47+
auto [res, tmp] = to_zero(s.substr(i, 4), i);
48+
for(int& j : tmp) ans.push(j);
49+
for(int j = 0; j < 4; j++) s[i+j] = res[j];
50+
}
51+
if(check(s)) {
52+
cout << ans.size() << '\n';
53+
while(!ans.empty()) {
54+
cout << ans.top() <<'\n';
55+
ans.pop();
56+
}
57+
}else cout << -1 << '\n';
4358
}
44-
for(int i = s.length() - 4; i >= 0; i--) {
45-
auto [res, tmp] = to_zero(s.substr(i, 4), i);
46-
for(int& j : tmp) ans.push(j);
47-
for(int j = 0; j < 4; j++) s[i+j] = res[j];
48-
}
49-
if(check(s)){
50-
cout << ans.size() << '\n';
51-
while(!ans.empty()) {
52-
cout << ans.top() <<'\n';
53-
ans.pop();
54-
}
55-
}else cout << -1 << '\n';
5659
return 0;
5760
}

0 commit comments

Comments
 (0)