QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#85048#5233. Wielki Zderzacz Termionów [A]anhduc27010 77ms27036kbC++234.7kb2023-03-06 22:12:532023-03-06 22:12:56

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:12:56]
  • 评测
  • 测评结果:0
  • 用时:77ms
  • 内存:27036kb
  • [2023-03-06 22:12:53]
  • 提交

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;
	}
	cout<<d*inv[3]%mod;
	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: 11ms
memory: 26840kb

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:

1021
1022
1021
1021
1022
1022
1022
511
1022
2143
1021
1021
1022
1022
1021
1021
1021
1022
1021
510

result:

wrong answer 1st lines differ - expected: '21', found: '1021'

Subtask #2:

score: 0
Wrong Answer

Test #14:

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

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:

625968344251936681
812984175625968344
625968344251936682
625968344251936682
812984175625968345
812984175625968345
812984175625968345
812984175625968344
906492091812984175
906492091812984175
453246045906492091
726623026453246046
726623026453246045
726623026453246045
726623026453246045
863311516726623...

result:

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

Subtask #3:

score: 0
Wrong Answer

Test #27:

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

input:

10000 5000
NCZNZCCZCNCZCNCZZCCZCNZNZZNNCCNCZCNZCZCNZCNNZZNZZZNZCCZZZCCNCZNZCCNZCZZCNCZZNNNZCCCZNNZNZCCZNNCNCCCNZNNZCNCCCCZZZNNZNZNCCZCNNZNCCCNNZCNCNNZNCNCZNNCCZCCZNZCNZNCNNNZZNNNCNZNCNNCZCNNZZCCNCZCNNNNZCCNZCCCZZNZZCCZNNNZNNCZZNZZCNCZNNCCNZZCZNNNNCCZCCZCCZCCCZNNCCZZCCZZNCNCCCZNCCCZCZNNNCNNNCNZCCZNZZ...

output:

758425343516850681
51685068033701354
758425343516850681
758425343516850681
758425343516850681
51685068033701354
51685068033701354
51685068033701353
3370135367402707
67402707134805415
134805414269610830
134805414269610830
67402707134805415
134805414269610830
134805414269610830
269610829539221659
1348...

result:

wrong answer 1st lines differ - expected: '516850681', found: '758425343516850681'

Subtask #4:

score: 0
Wrong Answer

Test #38:

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

input:

30000 20000
ZZNNZNNZNNCZNNCCNZCCZZZZZZCZNNCCZCCCZNNNZCZNCCCZCCCNCZZNZCCNCZNNZCNZZZCZCNNCNNZCCNNCCCCCZZNCNZZZCZCCNZNZZNNNCCCZNCCZNNZZCNCCNNNZZZZZNCNNZCZNCZNCCZCZZCNCZNNNCCNZCCCCCCNZNNCZZNCNZNNCZCNCZNCZZNZZNNCZCZCNZZCNNNNZNNZZZNZZNNNNNZCZCNNZZNCZCZCCNCCZZNCCCZZNZZCNNCNZZNNZNCCCZZNCCZCCNZCNCCZCCNNNNCZC...

output:

627728133255456260
627728133255456260
627728133255456260
255456259510912519
627728133255456259
627728133255456259
627728133255456259
313864066627728133
313864066627728133
313864066627728133
313864066627728133
313864066627728134
627728133255456260
313864066627728133
313864066627728133
313864066627728...

result:

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

Subtask #5:

score: 0
Wrong Answer

Test #50:

score: 0
Wrong Answer
time: 40ms
memory: 27008kb

input:

100000 50000
NNCZNCNCCZCZNCZZNNNNNZCNZCCCZCNCNZNCNZCNCCZZCZZNCZNZZNZCCCCNZNZNNNNNZNNCZNCZCNNZNCCNNZCNZNCNNZNZZCZNNCCCNCNNZCNCNNNNCZNNZNZCZNZZCCZNCCNZCNZZCNNZCNCNZNZNNZZCZZCCCCNCZZNZZCZCZNCNZZZCNNZNZCCZCNCZZNNCCNZNZNNCZCNCCCCNCNZZZZNNNCNZNCNCNCNCCZNCZNCNNZNCCNNNCNZZCZZCNZNZNCNCCZNNNCZCZCCCZCNCNZNCNZC...

output:

380433568760867136
380433568760867136
380433568760867137
690216787380433569
690216787380433568
690216787380433568
845108397690216788
422554198845108397
422554198845108397
422554198845108397
845108397690216787
690216787380433568
690216787380433568
690216787380433569
690216787380433569
690216787380433...

result:

wrong answer 1st lines differ - expected: '760867136', found: '380433568760867136'

Subtask #6:

score: 0
Wrong Answer

Test #62:

score: 0
Wrong Answer
time: 72ms
memory: 27008kb

input:

200000 100000
ZNCCNZCNCZZZZZZNNNNCNZCCCNNNCCZNCZCCZZNZZCZCZCCCNZCNNNNNCNNCZCZNCCCZZNNZNZZZNCZNNZCNZCCNCZCCZNNZCNCCNZNCNNNNZZNNNZCCCZZNNZCNCNNCZNZZNNZZZCCCCCCNNNNNNCNZCCNCNZCZZNCNCNCCNZCZCCZNNNNZZZNCCCCNNNCNZCCNCCZCZCNCCNCNCZNNNCNZZNNZCZZZNZCZNNNZNZZNNCCCCCCZNCNNNZCNZZCZZNCCZNCNCCCNCCZCNZNZCZNZZCCNCZ...

output:

858713825717427644
858713825717427644
717427644434855281
717427644434855282
717427644434855282
858713825717427645
929356916858713826
858713825717427645
858713825717427645
858713825717427645
929356916858713826
929356916858713826
964678461929356916
929356916858713826
929356916858713826
929356916858713...

result:

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

Subtask #7:

score: 0
Wrong Answer

Test #75:

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

input:

200000 100000
CCNNCZCNZCCCNCZZNZCCNCNCNNZCZZZCCZCCCCCNCZZNNZNCZNCZZNNCCNZZZZZNNNNZNNCZCNZCZNCNCZZZCNZNZNNCZNNNCCCCNNCZCCNNCZZCNZCNCCZZNZNNCNCCCNNZNNZZNZZCCNNCCZNZCNCNNZNCNNCNZZNZZNNZNNCCNCCNNZCCNZNCNZNCZNCNCNZCCZNCZNNZNNNZNZCCZNCZCZNZZNZCZZZCNCNZZZZZNNZNZZCCNNZNCNNNZNNNNZCNCCCCCCCNZCNCCZZCNNCNZCNZNC...

output:

732326939464653872
464653872929307745
464653872929307745
464653872929307745
732326939464653873
464653872929307745
464653872929307744
464653872929307745
929307744858615483
929307744858615483
858615482717230958
858615482717230957
858615482717230957
717230957434461908
858615482717230957
717230957434461...

result:

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

Subtask #8:

score: 0
Wrong Answer

Test #85:

score: 0
Wrong Answer
time: 52ms
memory: 26940kb

input:

200000 100000
ZZCCCZZCCZNZCZCZNCZCCZCNNNCZZZCNCZCCZCCZNZCCCNNCZZZNCNNCZZNCNCNNCCCZNCNZZCZCNCNCNCZCZCZNNNCNCCCCZNZNZNCCNCCCCNCCZZZNNZCCCCCNZNNZNCCCCZZZZCCNNZZNCNCZNCNCNNNZNZNZNCCNCNZCZCCCNNCCNNZNCNZCCZNZCZCCCZNZCNNCNNZZCCNZNZCZNZCNCCZZNZNCNCZCNNCCCNZNNNCZNNZCZZZCCZCNNZZNZNZCZCCCNNZCZCCCNNZZCZZZNNNZCC...

output:

758095222516190438
379047611758095223
379047611758095223
379047611758095223
189523805379047611
189523805379047611
189523805379047611
189523805379047611
594761906189523806
594761906189523805
594761906189523805
189523805379047611
379047611758095222
379047611758095223
189523805379047612
189523805379047...

result:

wrong answer 1st lines differ - expected: '516190438', found: '758095222516190438'

Subtask #9:

score: 0
Wrong Answer

Test #94:

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

input:

200000 100000
ZNCZCCCNNCCNCNCZCCZZCNNNNCZCCCZNNCNZNCNCNCZNCZNZNNZNNCCNZZCZZNZZCCNNNZCNNZCZCNCNZNZZNCZNZZNZZNZZZCNCNZNZCNNNCZZNCNZCZNCNNZZCZCCZZZZCZNNNCCCZCNNCNCNCNNCNNCCZNCZZCZZZZCCCZNCCCNCCZCNCCNNZCNNNCCZNCZCZNZCCZNNNZCCCZZZCZCCCZNZCCNNNNZNNCZNCNZNZNCNCCZNCZNZZCZNZNNCCNCNZNZZNCNZCCCNCZZNNNZNNNNZZNC...

output:

711855308423710609
855927657711855308
927963832855927658
927963832855927658
963981919927963832
963981919927963832
963981919927963832
963981919927963832
927963832855927658
927963832855927658
927963832855927658
927963832855927658
963981919927963832
981990963963981920
963981919927963833
981990963963981...

result:

wrong answer 1st lines differ - expected: '423710609', found: '711855308423710609'

Subtask #10:

score: 0
Wrong Answer

Test #103:

score: 0
Wrong Answer
time: 73ms
memory: 27012kb

input:

200000 100000
CZNCNZZNNNZZNCCZNZCCNNNCZNCNZCCNNCNCCNNZCNZCNCCCCZNZNZNCCNNNNCCNCNZZNZNCZNZZCZNCCNZZCNZNZZCNNNNCZNCCZCZCCCZNNCZZNCZCZNCZNZZNZNCZCZCNNCZCZCCZNZCCNNCCCCZCCNNCNZNCCCNZZZZZZCCZZNCNCZNZZNCZCCZCNZNZZNNNCCCCNZCCZCNZZCNNCCNZZCZZCZZZZZNNZCNCZZZCCCCZCNZZZZNZZZZCCCZZCCNCZNCCZZCNNNCCNZZZCNCZNZCZNC...

output:

54194379883887589
83887589167775179
167775179335550359
167775179335550359
83887589167775179
54194379883887590
54194379883887590
770971902541943798
770971902541943799
385485951770971903
385485951770971903
385485951770971903
385485951770971903
192742975385485951
596371491192742975
298185745596371491
2...

result:

wrong answer 1st lines differ - expected: '83887589', found: '54194379883887589'