求调/n较小的hack
查看原帖
求调/n较小的hack
612567
Kazeno_Akina楼主2023/11/4 11:27

code:

#include <bits/stdc++.h>
using namespace std;
const int N=5e6+5,P=1e9+7;
int n,m,p,k,w,lasp,startp,a[N],t[N];
long long b,res=1,memcnt,cnt[3],ans[N];
inline void restart(long long &seed,int base,int k,int &t1,int &a1){
	int ret=seed;
	seed=(seed*base+233)%P,t1=(ret&1)+1;
	ret=seed;
	seed=(seed*base+233)%P,a1=(ret%k)+1;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin >> n >> m,startp=1;
	if(n==1){cout << 1;return 0;}
	for(int i=1;i<=m;++i){
		cin >> p >> k >> b >> w;
		for(int j=lasp+1;j<=p;++j) restart(b,w,k,t[j],a[j]),cnt[t[j]]+=a[j];
		lasp=p;
	}
	if(cnt[t[1]]>cnt[3-t[1]]) for(int i=2;i<=n;++i) if(t[i]!=t[1]){startp=i,ans[1]=1,--a[i];break;}
	for(int i=startp,j;i<startp+(n<<1);++i){
		j=(i-1)%n+1;
		if(t[j]==t[startp]){memcnt+=a[j],ans[j]+=a[j],a[j]=0;}
		else if(memcnt<a[j]) a[j]-=memcnt,ans[j]+=memcnt,memcnt=0;
		else ans[j]+=a[j],memcnt-=a[j],a[j]=0;
	}
	for(long long i=1;i<=n;++i) res*=(((ans[i]^(i*i))+1)%P),res%=P;
	cout << res;
	return 0;
}

WA on样例#2,但由于n太大了调不出来qwq。

2023/11/4 11:27
加载中...