# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
966304 | 2024-04-19T16:37:04 Z | 8pete8 | Snake Escaping (JOI18_snake_escaping) | C++17 | 1040 ms | 21748 KB |
#include<iostream> #include<stack> #include<map> #include<vector> #include<string> #include<unordered_map> #include <queue> #include<cstring> #include<limits.h> #include <cassert> #include<cmath> #include<set> #include<algorithm> #include <iomanip> #include<numeric> //gcd(a,b) #include<bitset> #include <cstdlib> #include <cstdint> using namespace std; #define ll long long #define f first //#define endl "\n" #define s second #define pii pair<int,int> #define ppii pair<int,pii> #define vi vector<int> #define pb push_back #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define F(n) for(int i=0;i<n;i++) #define lb lower_bound #define ub upper_bound #define fastio ios::sync_with_stdio(false);cin.tie(NULL); #pragma GCC optimize ("03,unroll-loops") using namespace std; //#define int long long #define double long double const int mod=998244353,mxn=3e5+5,lg=60,inf=1e18,minf=-1e18,Mxn=1e6+50000; int dp1[Mxn+10],cost[Mxn+10],rdp0[Mxn+10]; int32_t main(){ fastio int n,q;cin>>n>>q; string a;cin>>a; auto change=[&](int x){ int k=0; for(int i=0;i<n;i++)if(!(x&(1LL<<i)))k+=1LL<<i; return k; }; for(int i=0;i<(1LL<<n);i++)cost[i]=dp1[i]=rdp0[change(i)]=(a[i]-'0'); for(int i=0;i<n;i++)for(int j=0;j<(1LL<<n);j++)if(j&(1LL<<i))dp1[j]+=dp1[j^(1LL<<i)]; //for(int i=0;i<n;i++)for(int j=(1LL<<n)-1;j>=0;j--)if(!(j&(1LL<<i)))dp0[j]+=dp0[j+(1LL<<i)]; int root=sqrt(n); root++; for(int i=0;i<n;i++)for(int j=0;j<(1LL<<n);j++)if(j&(1LL<<i))rdp0[j]+=rdp0[j^(1LL<<i)]; while(q--){ cin>>a; reverse(all(a)); int x=0,y=0; vector<int>c; int bro=0,bro2=0,c1=0,c0=0; for(int i=0;i<n;i++){ if(a[i]=='1')x+=(1LL<<i),y+=(1LL<<i),c1++; else if(a[i]=='?')c.pb(i),bro+=(1LL<<i),x+=(1LL<<i); else c0++; } int m=0; int ans=0,g; if(c.size()<=root){//5 tl m=c.size(); for(int i=0;i<(1LL<<m);i++){ for(int j=0;j<m;j++)if((i&(1LL<<j))==0)x-=(1LL<<c[j]); ans+=cost[x]; for(int j=0;j<m;j++)if((i&(1LL<<j))==0)x+=(1LL<<c[j]); } } else if(c1<c0){ m=c1; x-=bro; g=x; while(1){ if((m-__builtin_popcount(g))%2)ans-=dp1[g+bro]; else ans+=dp1[g+bro]; if(g==0)break; g=(g-1)&x; } } else{ m=c0; y=change(y); y-=bro; int g=y; while(1){ if((m-__builtin_popcount(g))%2)ans-=rdp0[g+bro]; else ans+=rdp0[g+bro]; if(g==0)break; g=(g-1)&y; } } cout<<ans<<'\n'; } return 0; } /* if cnt? <= sqrt(m) we can do (2^4)? bruteforce (maybe even 5) else we can do sos dp and somehow remove the overcount we can turn all ? into one and get sos of that bit overcount when "1" bit that is originaly turned on switch to 0(for subset) we can switch them off and subtract from the original answer so it cost 2^(cnt1){ we need to somehow do pie starting from original answer-> if we turn off 1 bit ans-(turn of x bit)-(turn of y bit)+(turn of x and y bit) so if cnt%2==1 then we subtract else we add back in } cnt1 can be at most 16,worst case is all 1 (2^16) we can also do sos dp where 0 is now the "switchable" value so if cnt0<cnt1 we take do from 0 dp else from 1 tc-> worst case q*(2^m)*m pre com time is m*(2^m+1) q*(x*(2^x)+(2^(m-x)/2)) */
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 4440 KB | Output is correct |
2 | Correct | 2 ms | 4444 KB | Output is correct |
3 | Correct | 1 ms | 4444 KB | Output is correct |
4 | Correct | 2 ms | 4440 KB | Output is correct |
5 | Correct | 1 ms | 4444 KB | Output is correct |
6 | Correct | 1 ms | 4444 KB | Output is correct |
7 | Correct | 1 ms | 4444 KB | Output is correct |
8 | Correct | 1 ms | 4444 KB | Output is correct |
9 | Correct | 1 ms | 4444 KB | Output is correct |
10 | Correct | 1 ms | 4444 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 4440 KB | Output is correct |
2 | Correct | 2 ms | 4444 KB | Output is correct |
3 | Correct | 1 ms | 4444 KB | Output is correct |
4 | Correct | 2 ms | 4440 KB | Output is correct |
5 | Correct | 1 ms | 4444 KB | Output is correct |
6 | Correct | 1 ms | 4444 KB | Output is correct |
7 | Correct | 1 ms | 4444 KB | Output is correct |
8 | Correct | 1 ms | 4444 KB | Output is correct |
9 | Correct | 1 ms | 4444 KB | Output is correct |
10 | Correct | 1 ms | 4444 KB | Output is correct |
11 | Correct | 301 ms | 8688 KB | Output is correct |
12 | Correct | 314 ms | 8016 KB | Output is correct |
13 | Correct | 297 ms | 7316 KB | Output is correct |
14 | Correct | 309 ms | 7508 KB | Output is correct |
15 | Correct | 301 ms | 8528 KB | Output is correct |
16 | Correct | 343 ms | 7792 KB | Output is correct |
17 | Correct | 334 ms | 7644 KB | Output is correct |
18 | Correct | 275 ms | 9504 KB | Output is correct |
19 | Correct | 154 ms | 6484 KB | Output is correct |
20 | Correct | 326 ms | 8232 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 4440 KB | Output is correct |
2 | Correct | 2 ms | 4444 KB | Output is correct |
3 | Correct | 1 ms | 4444 KB | Output is correct |
4 | Correct | 2 ms | 4440 KB | Output is correct |
5 | Correct | 1 ms | 4444 KB | Output is correct |
6 | Correct | 1 ms | 4444 KB | Output is correct |
7 | Correct | 1 ms | 4444 KB | Output is correct |
8 | Correct | 1 ms | 4444 KB | Output is correct |
9 | Correct | 1 ms | 4444 KB | Output is correct |
10 | Correct | 1 ms | 4444 KB | Output is correct |
11 | Correct | 301 ms | 8688 KB | Output is correct |
12 | Correct | 314 ms | 8016 KB | Output is correct |
13 | Correct | 297 ms | 7316 KB | Output is correct |
14 | Correct | 309 ms | 7508 KB | Output is correct |
15 | Correct | 301 ms | 8528 KB | Output is correct |
16 | Correct | 343 ms | 7792 KB | Output is correct |
17 | Correct | 334 ms | 7644 KB | Output is correct |
18 | Correct | 275 ms | 9504 KB | Output is correct |
19 | Correct | 154 ms | 6484 KB | Output is correct |
20 | Correct | 326 ms | 8232 KB | Output is correct |
21 | Correct | 342 ms | 8584 KB | Output is correct |
22 | Correct | 336 ms | 8568 KB | Output is correct |
23 | Correct | 378 ms | 7692 KB | Output is correct |
24 | Correct | 408 ms | 7532 KB | Output is correct |
25 | Correct | 339 ms | 9468 KB | Output is correct |
26 | Correct | 405 ms | 8060 KB | Output is correct |
27 | Correct | 391 ms | 8008 KB | Output is correct |
28 | Correct | 340 ms | 10576 KB | Output is correct |
29 | Correct | 179 ms | 6484 KB | Output is correct |
30 | Correct | 415 ms | 8524 KB | Output is correct |
31 | Correct | 375 ms | 8476 KB | Output is correct |
32 | Correct | 414 ms | 8532 KB | Output is correct |
33 | Correct | 328 ms | 7328 KB | Output is correct |
34 | Correct | 413 ms | 7548 KB | Output is correct |
35 | Correct | 405 ms | 7880 KB | Output is correct |
36 | Correct | 136 ms | 6520 KB | Output is correct |
37 | Correct | 310 ms | 8392 KB | Output is correct |
38 | Correct | 202 ms | 6472 KB | Output is correct |
39 | Correct | 380 ms | 7776 KB | Output is correct |
40 | Correct | 413 ms | 7624 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 4440 KB | Output is correct |
2 | Correct | 2 ms | 4444 KB | Output is correct |
3 | Correct | 1 ms | 4444 KB | Output is correct |
4 | Correct | 2 ms | 4440 KB | Output is correct |
5 | Correct | 1 ms | 4444 KB | Output is correct |
6 | Correct | 1 ms | 4444 KB | Output is correct |
7 | Correct | 1 ms | 4444 KB | Output is correct |
8 | Correct | 1 ms | 4444 KB | Output is correct |
9 | Correct | 1 ms | 4444 KB | Output is correct |
10 | Correct | 1 ms | 4444 KB | Output is correct |
11 | Correct | 107 ms | 14036 KB | Output is correct |
12 | Correct | 113 ms | 14180 KB | Output is correct |
13 | Correct | 107 ms | 14084 KB | Output is correct |
14 | Correct | 115 ms | 14068 KB | Output is correct |
15 | Correct | 108 ms | 14068 KB | Output is correct |
16 | Correct | 135 ms | 14320 KB | Output is correct |
17 | Correct | 148 ms | 14008 KB | Output is correct |
18 | Correct | 106 ms | 14320 KB | Output is correct |
19 | Correct | 100 ms | 13908 KB | Output is correct |
20 | Correct | 102 ms | 14180 KB | Output is correct |
21 | Correct | 107 ms | 14068 KB | Output is correct |
22 | Correct | 124 ms | 13936 KB | Output is correct |
23 | Correct | 122 ms | 13972 KB | Output is correct |
24 | Correct | 124 ms | 13920 KB | Output is correct |
25 | Correct | 119 ms | 14068 KB | Output is correct |
26 | Correct | 96 ms | 13812 KB | Output is correct |
27 | Correct | 109 ms | 14192 KB | Output is correct |
28 | Correct | 91 ms | 13920 KB | Output is correct |
29 | Correct | 116 ms | 13916 KB | Output is correct |
30 | Correct | 138 ms | 14068 KB | Output is correct |
31 | Correct | 110 ms | 14068 KB | Output is correct |
32 | Correct | 127 ms | 14104 KB | Output is correct |
33 | Correct | 124 ms | 14064 KB | Output is correct |
34 | Correct | 90 ms | 13812 KB | Output is correct |
35 | Correct | 110 ms | 14000 KB | Output is correct |
36 | Correct | 113 ms | 14072 KB | Output is correct |
37 | Correct | 108 ms | 14068 KB | Output is correct |
38 | Correct | 118 ms | 13908 KB | Output is correct |
39 | Correct | 117 ms | 14068 KB | Output is correct |
40 | Correct | 108 ms | 14072 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 4440 KB | Output is correct |
2 | Correct | 2 ms | 4444 KB | Output is correct |
3 | Correct | 1 ms | 4444 KB | Output is correct |
4 | Correct | 2 ms | 4440 KB | Output is correct |
5 | Correct | 1 ms | 4444 KB | Output is correct |
6 | Correct | 1 ms | 4444 KB | Output is correct |
7 | Correct | 1 ms | 4444 KB | Output is correct |
8 | Correct | 1 ms | 4444 KB | Output is correct |
9 | Correct | 1 ms | 4444 KB | Output is correct |
10 | Correct | 1 ms | 4444 KB | Output is correct |
11 | Correct | 301 ms | 8688 KB | Output is correct |
12 | Correct | 314 ms | 8016 KB | Output is correct |
13 | Correct | 297 ms | 7316 KB | Output is correct |
14 | Correct | 309 ms | 7508 KB | Output is correct |
15 | Correct | 301 ms | 8528 KB | Output is correct |
16 | Correct | 343 ms | 7792 KB | Output is correct |
17 | Correct | 334 ms | 7644 KB | Output is correct |
18 | Correct | 275 ms | 9504 KB | Output is correct |
19 | Correct | 154 ms | 6484 KB | Output is correct |
20 | Correct | 326 ms | 8232 KB | Output is correct |
21 | Correct | 342 ms | 8584 KB | Output is correct |
22 | Correct | 336 ms | 8568 KB | Output is correct |
23 | Correct | 378 ms | 7692 KB | Output is correct |
24 | Correct | 408 ms | 7532 KB | Output is correct |
25 | Correct | 339 ms | 9468 KB | Output is correct |
26 | Correct | 405 ms | 8060 KB | Output is correct |
27 | Correct | 391 ms | 8008 KB | Output is correct |
28 | Correct | 340 ms | 10576 KB | Output is correct |
29 | Correct | 179 ms | 6484 KB | Output is correct |
30 | Correct | 415 ms | 8524 KB | Output is correct |
31 | Correct | 375 ms | 8476 KB | Output is correct |
32 | Correct | 414 ms | 8532 KB | Output is correct |
33 | Correct | 328 ms | 7328 KB | Output is correct |
34 | Correct | 413 ms | 7548 KB | Output is correct |
35 | Correct | 405 ms | 7880 KB | Output is correct |
36 | Correct | 136 ms | 6520 KB | Output is correct |
37 | Correct | 310 ms | 8392 KB | Output is correct |
38 | Correct | 202 ms | 6472 KB | Output is correct |
39 | Correct | 380 ms | 7776 KB | Output is correct |
40 | Correct | 413 ms | 7624 KB | Output is correct |
41 | Correct | 107 ms | 14036 KB | Output is correct |
42 | Correct | 113 ms | 14180 KB | Output is correct |
43 | Correct | 107 ms | 14084 KB | Output is correct |
44 | Correct | 115 ms | 14068 KB | Output is correct |
45 | Correct | 108 ms | 14068 KB | Output is correct |
46 | Correct | 135 ms | 14320 KB | Output is correct |
47 | Correct | 148 ms | 14008 KB | Output is correct |
48 | Correct | 106 ms | 14320 KB | Output is correct |
49 | Correct | 100 ms | 13908 KB | Output is correct |
50 | Correct | 102 ms | 14180 KB | Output is correct |
51 | Correct | 107 ms | 14068 KB | Output is correct |
52 | Correct | 124 ms | 13936 KB | Output is correct |
53 | Correct | 122 ms | 13972 KB | Output is correct |
54 | Correct | 124 ms | 13920 KB | Output is correct |
55 | Correct | 119 ms | 14068 KB | Output is correct |
56 | Correct | 96 ms | 13812 KB | Output is correct |
57 | Correct | 109 ms | 14192 KB | Output is correct |
58 | Correct | 91 ms | 13920 KB | Output is correct |
59 | Correct | 116 ms | 13916 KB | Output is correct |
60 | Correct | 138 ms | 14068 KB | Output is correct |
61 | Correct | 110 ms | 14068 KB | Output is correct |
62 | Correct | 127 ms | 14104 KB | Output is correct |
63 | Correct | 124 ms | 14064 KB | Output is correct |
64 | Correct | 90 ms | 13812 KB | Output is correct |
65 | Correct | 110 ms | 14000 KB | Output is correct |
66 | Correct | 113 ms | 14072 KB | Output is correct |
67 | Correct | 108 ms | 14068 KB | Output is correct |
68 | Correct | 118 ms | 13908 KB | Output is correct |
69 | Correct | 117 ms | 14068 KB | Output is correct |
70 | Correct | 108 ms | 14072 KB | Output is correct |
71 | Correct | 557 ms | 18940 KB | Output is correct |
72 | Correct | 492 ms | 19032 KB | Output is correct |
73 | Correct | 706 ms | 17440 KB | Output is correct |
74 | Correct | 798 ms | 18092 KB | Output is correct |
75 | Correct | 539 ms | 19760 KB | Output is correct |
76 | Correct | 870 ms | 18460 KB | Output is correct |
77 | Correct | 782 ms | 18272 KB | Output is correct |
78 | Correct | 449 ms | 21748 KB | Output is correct |
79 | Correct | 321 ms | 15860 KB | Output is correct |
80 | Correct | 578 ms | 19220 KB | Output is correct |
81 | Correct | 665 ms | 18892 KB | Output is correct |
82 | Correct | 786 ms | 17688 KB | Output is correct |
83 | Correct | 564 ms | 17120 KB | Output is correct |
84 | Correct | 803 ms | 17908 KB | Output is correct |
85 | Correct | 836 ms | 18120 KB | Output is correct |
86 | Correct | 248 ms | 15856 KB | Output is correct |
87 | Correct | 480 ms | 18816 KB | Output is correct |
88 | Correct | 339 ms | 16096 KB | Output is correct |
89 | Correct | 673 ms | 17532 KB | Output is correct |
90 | Correct | 1040 ms | 18092 KB | Output is correct |
91 | Correct | 527 ms | 16964 KB | Output is correct |
92 | Correct | 849 ms | 18420 KB | Output is correct |
93 | Correct | 911 ms | 18248 KB | Output is correct |
94 | Correct | 254 ms | 15956 KB | Output is correct |
95 | Correct | 841 ms | 18168 KB | Output is correct |
96 | Correct | 883 ms | 17904 KB | Output is correct |
97 | Correct | 932 ms | 17980 KB | Output is correct |
98 | Correct | 799 ms | 18024 KB | Output is correct |
99 | Correct | 930 ms | 17792 KB | Output is correct |
100 | Correct | 826 ms | 17892 KB | Output is correct |