답안 #333119

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
333119 2020-12-04T16:43:39 Z soroush Snake Escaping (JOI18_snake_escaping) C++14
12 / 100
279 ms 11152 KB
/*
#pragma GCC optimize("O2")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx,avx2,sse,sse2,fma")
//*/
#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef pair<int  ,int > pii;
 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
 
const ll maxn  = 2e6+100;
const ll mod =1e9+7;
const ld PI = acos((ld)-1);
 
#define pb push_back
#define endl '\n'
#define dokme(x) cout << x , exit(0)
#define migmig ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define ms(x , y) memset(x , y , sizeof x)
ll pw(ll a, ll b, ll md = mod){ll res = 1;while(b){if(b&1){res=(a*res)%md;}a=(a*a)%md;b>>=1;}return(res);}
 
int l , q;
int a[maxn];
string s;
 
int ans[maxn];
 
int p[30];

void sub1(){
	for(int i = 0 ; i < p[l] ; i ++){
		int res = 0;
		int x = i;
		for(int j = l ; j >= 0 ; j --){
			if(x >= 2*p[j]){
				x = i;
				x-=2*p[j];
				ans[i] = ans[x] + ans[x + p[j]];
				break;
			}
			if(x >= p[j])
				res += (1 << j);
			x%=p[j];
			if(j == 0)ans[i] = a[res];
		}
	}
	while(q -- ){
		string t;
		cin >> t;
		reverse(t.begin() , t.end());
		int x = 0;
		for(int i = 0 ; i < l ; i ++)
			if(t[i] == '?')x+=p[i]*2;
			else if(t[i] == '1')x+=p[i];
		cout << ans[x] << endl;
	}
	exit(0);
}

vector < string > t;
int res[maxn];

int32_t main(){
    migmig;
    cin >> l >> q;
    cin >> s;
    for(int i = 0 ; i < (1 << l) ; i ++)
		a[i] = s[i] - '0';
	p[0] = 1;
	for(int i = 1 ; i < 16; i ++)
		p[i] = p[i - 1] * 3;
	if(l <= 10)
		sub1();
	t.reserve(q + 1);
	for(int i = 1 ; i <= q ; i ++)
		cin >> t[i] , reverse(t[i].begin() , t[i].end());
	for(int k = 0 ; k < 128 ; k ++){
		for(int i = 0 ; i < p[l] ; i ++){
			int res = 0;
			int x = i;
			for(int j = l ; j >= 0 ; j --){
				if(x >= 2*p[j]){
					x = i;
					x-=2*p[j];
					ans[i] = ans[x] + ans[x + p[j]];
					break;
				}
				if(x >= p[j])
					res += (1 << j);
				x%=p[j];
				if(j == 0)ans[i] = a[res * 128 + k];
			}
		}
		for(int i = 1 ; i <= q ; i ++){
			bool ok = 1;
			for(int j = 0 ; j < 7 ; j ++){
				if(k&(1 << j)){if(t[i][j] == '0'){ok=0 ;break;}}
				else if(t[i][j] == '1'){ok=0 ;break;}
			}
			if(!ok)continue;
			int x = 0;
			for(int j = 7 ; j < l ; j ++)
				if(t[i][j] == '?')x+=p[i]*2;
				else if(t[i][j] == '1')x+=p[i];
			res[i] += ans[x];
		}
	}
	
	for(int i = 1;  i <= q ; i ++)
		cout << res[i] << endl;
    return(0);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 620 KB Output is correct
2 Correct 2 ms 620 KB Output is correct
3 Correct 2 ms 620 KB Output is correct
4 Correct 2 ms 620 KB Output is correct
5 Correct 2 ms 620 KB Output is correct
6 Correct 2 ms 620 KB Output is correct
7 Correct 2 ms 748 KB Output is correct
8 Correct 2 ms 620 KB Output is correct
9 Correct 2 ms 620 KB Output is correct
10 Correct 2 ms 620 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 620 KB Output is correct
2 Correct 2 ms 620 KB Output is correct
3 Correct 2 ms 620 KB Output is correct
4 Correct 2 ms 620 KB Output is correct
5 Correct 2 ms 620 KB Output is correct
6 Correct 2 ms 620 KB Output is correct
7 Correct 2 ms 748 KB Output is correct
8 Correct 2 ms 620 KB Output is correct
9 Correct 2 ms 620 KB Output is correct
10 Correct 2 ms 620 KB Output is correct
11 Correct 238 ms 4612 KB Output is correct
12 Correct 259 ms 4264 KB Output is correct
13 Correct 251 ms 3820 KB Output is correct
14 Correct 262 ms 3692 KB Output is correct
15 Correct 258 ms 4716 KB Output is correct
16 Correct 262 ms 3820 KB Output is correct
17 Correct 279 ms 3820 KB Output is correct
18 Correct 194 ms 5612 KB Output is correct
19 Correct 231 ms 2668 KB Output is correct
20 Correct 264 ms 4332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 620 KB Output is correct
2 Correct 2 ms 620 KB Output is correct
3 Correct 2 ms 620 KB Output is correct
4 Correct 2 ms 620 KB Output is correct
5 Correct 2 ms 620 KB Output is correct
6 Correct 2 ms 620 KB Output is correct
7 Correct 2 ms 748 KB Output is correct
8 Correct 2 ms 620 KB Output is correct
9 Correct 2 ms 620 KB Output is correct
10 Correct 2 ms 620 KB Output is correct
11 Correct 238 ms 4612 KB Output is correct
12 Correct 259 ms 4264 KB Output is correct
13 Correct 251 ms 3820 KB Output is correct
14 Correct 262 ms 3692 KB Output is correct
15 Correct 258 ms 4716 KB Output is correct
16 Correct 262 ms 3820 KB Output is correct
17 Correct 279 ms 3820 KB Output is correct
18 Correct 194 ms 5612 KB Output is correct
19 Correct 231 ms 2668 KB Output is correct
20 Correct 264 ms 4332 KB Output is correct
21 Runtime error 4 ms 620 KB Execution killed with signal 11 (could be triggered by violating memory limits)
22 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 620 KB Output is correct
2 Correct 2 ms 620 KB Output is correct
3 Correct 2 ms 620 KB Output is correct
4 Correct 2 ms 620 KB Output is correct
5 Correct 2 ms 620 KB Output is correct
6 Correct 2 ms 620 KB Output is correct
7 Correct 2 ms 748 KB Output is correct
8 Correct 2 ms 620 KB Output is correct
9 Correct 2 ms 620 KB Output is correct
10 Correct 2 ms 620 KB Output is correct
11 Runtime error 15 ms 11152 KB Execution killed with signal 11 (could be triggered by violating memory limits)
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 620 KB Output is correct
2 Correct 2 ms 620 KB Output is correct
3 Correct 2 ms 620 KB Output is correct
4 Correct 2 ms 620 KB Output is correct
5 Correct 2 ms 620 KB Output is correct
6 Correct 2 ms 620 KB Output is correct
7 Correct 2 ms 748 KB Output is correct
8 Correct 2 ms 620 KB Output is correct
9 Correct 2 ms 620 KB Output is correct
10 Correct 2 ms 620 KB Output is correct
11 Correct 238 ms 4612 KB Output is correct
12 Correct 259 ms 4264 KB Output is correct
13 Correct 251 ms 3820 KB Output is correct
14 Correct 262 ms 3692 KB Output is correct
15 Correct 258 ms 4716 KB Output is correct
16 Correct 262 ms 3820 KB Output is correct
17 Correct 279 ms 3820 KB Output is correct
18 Correct 194 ms 5612 KB Output is correct
19 Correct 231 ms 2668 KB Output is correct
20 Correct 264 ms 4332 KB Output is correct
21 Runtime error 4 ms 620 KB Execution killed with signal 11 (could be triggered by violating memory limits)
22 Halted 0 ms 0 KB -