QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#85050#5233. Wielki Zderzacz Termionów [A]anhduc27010 67ms26976kbC++234.6kb2023-03-06 22:13:572023-03-06 22:14:22

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-03-06 22:14:22]
  • 评测
  • 测评结果:0
  • 用时:67ms
  • 内存:26976kb
  • [2023-03-06 22:13:57]
  • 提交

answer

/*
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize("unroll-loops")
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define all(x) x.begin(), x.end()
#define len(x) ll(x.size())
#define eb emplace_back
#define PI 3.14159265359
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define MIN(v) *min_element(all(v))
#define MAX(v) *max_element(all(v))
#define BIT(x,i) (1&((x)>>(i)))
#define MASK(x) (1LL<<(x))
#define task "WZT"  
typedef long long ll;
const ll INF=1e18;
const int maxn=1e6+5;
const int mod=1e9+7;
const int mo=998244353;
using pi=pair<ll,ll>;
using vi=vector<ll>;
using pii=pair<pair<ll,ll>,ll>;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int n,m;
int inv2;
string s;
int inv[maxn];
int invfact[maxn];
int fact[maxn];
int binpow(int a,int b){
	int res=1;
	while(b>0){
		if(b&1)res=res*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return res;
}
int calc(int z,int t){
	int d=binpow(2,z);
	if(z%2==1){
		d-=2;
	}
	else{
		d-=1;
	}
	if(d<0)d+=mod;
	if(z%6==0){
		if(t==1 || t==2){
			return d*inv[3]%mod;
		}
		else{
			return (d*inv[3]+1)%mod;
		}
	}
	else if(z%6==1){
		if(t==0 || t==1){
			return (d*inv[3]+1)%mod;
		}
		else{
			return d*inv[3]%mod;
		}
	}
	else if(z%6==2){
		if(t==0 || t==2){
			return d*inv[3]%mod;
		}
		else{
			return (d*inv[3]+1)%mod;
		}
	}
	else if(z%6==3){
		if(t==1 || t==2){
			return (d*inv[3]+1)%mod;
		}
		else{
			return d*inv[3]%mod;
		}
	}
	else if(z%6==4){
		if(t==0 || t==1){
			return d*inv[3]%mod;
		}
		else{
			return (d*inv[3]+1)%mod;
		}
	}
	else{// z%6==5
		if(t==0 || t==2){
			return (d*inv[3]+1)%mod;
		}
		else{
			return d*inv[3]%mod;
		}
	}
}

int N,C,Z;
int ok=0;
int Z1;
int Z2;
int C1;
int C2;
int so=0;
int calc(){
	int q=(((N%3+(Z-C)%3)+6))%3;
	if(q==1){
		q=2;
	}
	else if(q==2){
		q=1;
	}
	int ans=binpow(2,N)-calc(N,q);
	if((Z1==n/2+1 && C2==n/2 )  && n%2==1){
		ans--;
	}
	if(( C1==n/2 && Z2==n/2+1)  && n%2==1){
		ans--;
	}
	return (ans%mod+mod)%mod;	
}
signed main()
{
	cin.tie(0),cout.tie(0)->sync_with_stdio(0);
   	// freopen(task".inp" , "r" , stdin);
   	// freopen(task".out" , "w" , stdout);
    cin>>n>>m;
    cin>>s;
    s=' '+s;
    inv2=binpow(2,mod-2);
    inv[1] =invfact[1]=fact[1]=inv[0]=invfact[0]=fact[0]= 1;
    for(int i = 2; i < maxn; ++i){
        inv[i] = mod - (mod/i) * inv[mod%i] % mod;
        fact[i]= fact[i-1]*i%mod;
        invfact[i]=invfact[i-1]*inv[i]%mod;
    }
    for(int i=1;i<=n;i++){
    	if(s[i]=='C'){
    		if(i%2==1){
    			C1++;
    		}
    		else{
    			C2++;
    		}
    		C++;
    	}
    	if(s[i]=='Z'){
    		if(i%2==1){
    			Z1++;
    		}
    		else{
    			Z2++;
    		}
    		Z++;
    	}
    	if(s[i]=='N'){
    		if(i%2==1){
    			C1++;
    		}
    		else{
    			C2++;
    		}
    		if(i%2==1){
    			Z1++;
    		}
    		else{
    			Z2++;
    		}
    		N++;
    	}

    }
    for(int i=2;i<=n;i++){

    	if(s[i]=='C' && s[i-1]=='C'){
    		so++;
    	}
    	if(s[i]=='Z' && s[i-1]=='Z'){
    		so++;
    	}
    }
    // cout<<calc()<<"\n";
    for(int i=1;i<=m;i++){
    	int k;
    	char c;
    	cin>>k>>c;
    	if(s[k]=='C'){
    		if(k%2==1){
    			C1--;
    		}
    		else{
    			C2--;
    		}
    		C--;
    	}
    	if(s[k]=='Z'){

    		if(k%2==1){
    			Z1--;
    		}
    		else{
    			Z2--;
    		}
    		Z--;
    	}
    	if(s[k]=='N'){
    		if(k%2==1){
    			C1--;
    		}
    		else{
    			C2--;
    		}
    		if(k%2==1){
    			Z1--;
    		}
    		else{
    			Z2--;
    		}
    		N--;
    	}
    	if(k>1&& s[k]==s[k-1] && s[k]!='N'){
    		so--;
    	}
    	if(s[k]==s[k+1] && s[k]!='N' && k<n){
    		so--;
    	}
    	s[k]=c;
    	if(k>1&& s[k]==s[k-1] && s[k]!='N'){
    		so++;
    	}
    	if(s[k]==s[k+1] && s[k]!='N' && k<n){
    		so++;
    	}
    	if(s[k]=='C'){
    		if(k%2==1){
    			C1++;
    		}
    		else{
    			C2++;
    		}
    		C++;
    	}
    	if(s[k]=='Z'){
    		if(k%2==1){
    			Z1++;
    		}
    		else{
    			Z2++;
    		}
    		Z++;
    	}
    	if(s[k]=='N'){
    		if(k%2==1){
    			C1++;
    		}
    		else{
    			C2++;
    		}
    		if(k%2==1){
    			Z1++;
    		}
    		else{
    			Z2++;
    		}
    		N++;
    	}
    	cout<<calc()<<"\n";
    }
    return 0;
}

/*
1 1 1 0 
2 1 2 1 
3 2 3 3 
4 5 5 6 
5 11 10 11 
6 22 21 21 
7 43 43 42 
8 85 86 85 
9 170 171 171 
10 341 341 342 
11 683 682 683 
12 1366 1365 1365 
// 
// 2^10 /3
// 2^9 * 2/3
// 2^
*/

詳細信息

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 16ms
memory: 26880kb

input:

20 20
CZZCZCCZNCZNZNNCCCZN
10 Z
16 Z
2 C
2 C
2 Z
3 Z
4 C
9 C
6 N
13 N
12 C
8 Z
18 Z
12 C
8 C
5 Z
10 Z
12 Z
9 Z
6 Z

output:

21
22
21
21
22
22
22
11
22
43
21
21
22
22
21
21
21
22
21
10

result:

wrong answer 2nd lines differ - expected: '21', found: '22'

Subtask #2:

score: 0
Wrong Answer

Test #14:

score: 0
Wrong Answer
time: 34ms
memory: 26760kb

input:

100 100
ZCZCCCZZNNZNNCCZNNNZZNCCZNNNZNNCNNZCCCZZZNNCNZCCZNNNZNZNNCZCNNZCZZCNCNNZCZCNNZCZCNCZNNCZZNCCNNNZZCZC
8 C
18 C
53 N
52 N
93 C
48 C
67 C
18 Z
57 Z
31 N
94 Z
90 Z
35 C
58 C
20 Z
12 C
87 N
5 C
71 C
21 Z
72 C
38 C
7 N
15 Z
100 Z
58 Z
77 N
87 C
37 Z
26 Z
64 Z
83 N
5 Z
82 C
71 C
37 Z
62 Z
36 N
28 N...

output:

251936681
625968344
251936682
251936682
625968345
625968345
625968345
625968344
812984175
812984175
906492091
453246046
453246045
453246045
453246045
726623026
453246045
453246045
726623026
726623026
726623027
726623027
453246046
453246046
453246045
453246046
453246046
726623026
726623027
863311517
...

result:

wrong answer 1st lines differ - expected: '251936682', found: '251936681'

Subtask #3:

score: 0
Wrong Answer

Test #27:

score: 0
Wrong Answer
time: 31ms
memory: 26904kb

input:

10000 5000
NCZNZCCZCNCZCNCZZCCZCNZNZZNNCCNCZCNZCZCNZCNNZZNZZZNZCCZZZCCNCZNZCCNZCZZCNCZZNNNZCCCZNNZNZCCZNNCNCCCNZNNZCNCCCCZZZNNZNZNCCZCNNZNCCCNNZCNCNNZNCNCZNNCCZCCZNZCNZNCNNNZZNNNCNZNCNNCZCNNZZCCNCZCNNNNZCCNZCCCZZNZZCCZNNNZNNCZZNZZCNCZNNCCNZZCZNNNNCCZCCZCCZCCCZNNCCZZCCZZNCNCCCZNCCCZCZNNNCNNNCNZCCZNZZ...

output:

516850681
33701354
516850681
516850681
516850681
33701354
33701354
33701353
67402707
134805415
269610830
269610830
134805415
269610830
269610830
539221659
269610829
269610829
269610829
269610829
269610830
134805415
67402708
33701354
516850680
758425343
758425343
758425344
758425344
758425343
8792126...

result:

wrong answer 2nd lines differ - expected: '516850681', found: '33701354'

Subtask #4:

score: 0
Wrong Answer

Test #38:

score: 0
Wrong Answer
time: 25ms
memory: 26900kb

input:

30000 20000
ZZNNZNNZNNCZNNCCNZCCZZZZZZCZNNCCZCCCZNNNZCZNCCCZCCCNCZZNZCCNCZNNZCNZZZCZCNNCNNZCCNNCCCCCZZNCNZZZCZCCNZNZZNNNCCCZNCCZNNZZCNCCNNNZZZZZNCNNZCZNCZNCCZCZZCNCZNNNCCNZCCCCCCNZNNCZZNCNZNNCZCNCZNCZZNZZNNCZCZCNZZCNNNNZNNZZZNZZNNNNNZCZCNNZZNCZCZCCNCCZZNCCCZZNZZCNNCNZZNNZNCCCZZNCCZCCNZCNCCZCCNNNNCZC...

output:

255456260
255456260
255456260
510912519
255456259
255456259
255456259
627728133
627728133
627728133
627728133
627728134
255456260
627728133
627728133
627728133
627728133
255456259
510912519
510912519
510912520
510912520
21825032
21825032
510912519
510912519
510912519
510912519
510912520
21825032
218...

result:

wrong answer 1st lines differ - expected: '627728134', found: '255456260'

Subtask #5:

score: 0
Wrong Answer

Test #50:

score: 0
Wrong Answer
time: 50ms
memory: 26932kb

input:

100000 50000
NNCZNCNCCZCZNCZZNNNNNZCNZCCCZCNCNZNCNZCNCCZZCZZNCZNZZNZCCCCNZNZNNNNNZNNCZNCZCNNZNCCNNZCNZNCNNZNZZCZNNCCCNCNNZCNCNNNNCZNNZNZCZNZZCCZNCCNZCNZZCNNZCNCNZNZNNZZCZZCCCCNCZZNZZCZCZNCNZZZCNNZNZCCZCNCZZNNCCNZNZNNCZCNCCCCNCNZZZZNNNCNZNCNCNCNCCZNCZNCNNZNCCNNNCNZZCZZCNZNZNCNCCZNNNCZCZCCCZCNCNZNCNZC...

output:

760867136
760867136
760867137
380433569
380433568
380433568
690216788
845108397
845108397
845108397
690216787
380433568
380433568
380433569
380433569
380433569
380433569
380433568
690216787
690216787
845108397
845108398
422554199
211277099
422554199
422554198
422554198
845108397
845108397
690216788
...

result:

wrong answer 3rd lines differ - expected: '760867136', found: '760867137'

Subtask #6:

score: 0
Wrong Answer

Test #62:

score: 0
Wrong Answer
time: 67ms
memory: 26936kb

input:

200000 100000
ZNCCNZCNCZZZZZZNNNNCNZCCCNNNCCZNCZCCZZNZZCZCZCCCNZCNNNNNCNNCZCZNCCCZZNNZNZZZNCZNNZCNZCCNCZCCZNNZCNCCNZNCNNNNZZNNNZCCCZZNNZCNCNNCZNZZNNZZZCCCCCCNNNNNNCNZCCNCNZCZZNCNCNCCNZCZCCZNNNNZZZNCCCCNNNCNZCCNCCZCZCNCCNCNCZNNNCNZZNNZCZZZNZCZNNNZNZZNNCCCCCCZNCNNNZCNZZCZZNCCZNCNCCCNCCZCNZNZCZNZZCCNCZ...

output:

717427644
717427644
434855281
434855282
434855282
717427645
858713826
717427645
717427645
717427645
858713826
858713826
929356916
858713826
858713826
858713826
858713826
717427644
434855281
717427644
717427645
717427644
717427644
717427644
717427644
717427644
717427645
717427645
858713826
858713826
...

result:

wrong answer 1st lines differ - expected: '717427645', found: '717427644'

Subtask #7:

score: 0
Wrong Answer

Test #75:

score: 0
Wrong Answer
time: 53ms
memory: 26912kb

input:

200000 100000
CCNNCZCNZCCCNCZZNZCCNCNCNNZCZZZCCZCCCCCNCZZNNZNCZNCZZNNCCNZZZZZNNNNZNNCZCNZCZNCNCZZZCNZNZNNCZNNNCCCCNNCZCCNNCZZCNZCNCCZZNZNNCNCCCNNZNNZZNZZCCNNCCZNZCNCNNZNCNNCNZZNZZNNZNNCCNCCNNZCCNZNCNZNCZNCNCNZCCZNCZNNZNNNZNZCCZNCZCZNZZNZCZZZCNCNZZZZZNNZNZZCCNNZNCNNNZNNNNZCNCCCCCCCNZCNCCZZCNNCNZCNZNC...

output:

464653872
929307745
929307745
929307745
464653873
929307745
929307744
929307745
858615483
858615483
717230958
717230957
717230957
434461908
717230957
434461908
717230958
434461908
434461909
434461909
434461909
717230958
434461908
717230958
717230957
434461908
434461908
434461908
717230957
717230957
...

result:

wrong answer 1st lines differ - expected: '732326940', found: '464653872'

Subtask #8:

score: 0
Wrong Answer

Test #85:

score: 0
Wrong Answer
time: 54ms
memory: 26912kb

input:

200000 100000
ZZCCCZZCCZNZCZCZNCZCCZCNNNCZZZCNCZCCZCCZNZCCCNNCZZZNCNNCZZNCNCNNCCCZNCNZZCZCNCNCNCZCZCZNNNCNCCCCZNZNZNCCNCCCCNCCZZZNNZCCCCCNZNNZNCCCCZZZZCCNNZZNCNCZNCNCNNNZNZNZNCCNCNZCZCCCNNCCNNZNCNZCCZNZCZCCCZNZCNNCNNZZCCNZNZCZNZCNCCZZNZNCNCZCNNCCCNZNNNCZNNZCZZZCCZCNNZZNZNZCZCCCNNZCZCCCNNZZCZZZNNNZCC...

output:

516190438
758095223
758095223
758095223
379047611
379047611
379047611
379047611
189523806
189523805
189523805
379047611
758095222
758095223
379047612
379047612
379047611
189523806
189523805
189523805
594761906
594761906
797380957
797380957
398690478
797380956
398690478
797380956
797380956
797380956
...

result:

wrong answer 2nd lines differ - expected: '516190438', found: '758095223'

Subtask #9:

score: 0
Wrong Answer

Test #94:

score: 0
Wrong Answer
time: 58ms
memory: 26976kb

input:

200000 100000
ZNCZCCCNNCCNCNCZCCZZCNNNNCZCCCZNNCNZNCNCNCZNCZNZNNZNNCCNZZCZZNZZCCNNNZCNNZCZCNCNZNZZNCZNZZNZZNZZZCNCNZNZCNNNCZZNCNZCZNCNNZZCZCCZZZZCZNNNCCCZCNNCNCNCNNCNNCCZNCZZCZZZZCCCZNCCCNCCZCNCCNNZCNNNCCZNCZCZNZCCZNNNZCCCZZZCZCCCZNZCCNNNNZNNCZNCNZNZNCNCCZNCZNZZCZNZNNCCNCNZNZZNCNZCCCNCZZNNNZNNNNZZNC...

output:

423710609
711855308
855927658
855927658
927963832
927963832
927963832
927963832
855927658
855927658
855927658
855927658
927963832
963981920
927963833
963981920
981990963
981990963
981990963
981990963
490995481
490995482
745497744
745497744
872748875
872748876
936374441
872748876
745497745
490995482
...

result:

wrong answer 2nd lines differ - expected: '423710609', found: '711855308'

Subtask #10:

score: 0
Wrong Answer

Test #103:

score: 0
Wrong Answer
time: 60ms
memory: 26968kb

input:

200000 100000
CZNCNZZNNNZZNCCZNZCCNNNCZNCNZCCNNCNCCNNZCNZCNCCCCZNZNZNCCNNNNCCNCNZZNZNCZNZZCZNCCNZZCNZNZZCNNNNCZNCCZCZCCCZNNCZZNCZCZNCZNZZNZNCZCZCNNCZCZCCZNZCCNNCCCCZCCNNCNZNCCCNZZZZZZCCZZNCNCZNZZNCZCCZCNZNZZNNNCCCCNZCCZCNZZCNNCCNZZCZZCZZZZZNNZCNCZZZCCCCZCNZZZZNZZZZCCCZZCCNCZNCCZZCNNNCCNZZZCNCZNZCZNC...

output:

83887589
167775179
335550359
335550359
167775179
83887590
83887590
541943798
541943799
770971903
770971903
770971903
770971903
385485951
192742975
596371491
596371491
596371491
596371491
596371492
596371492
596371491
596371491
596371491
596371491
596371491
298185746
298185746
298185746
596371491
192...

result:

wrong answer 2nd lines differ - expected: '83887589', found: '167775179'