Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
53290 LinkZelda 折纸 C++ 运行出错 0 0 MS 532 KB 1983 2022-07-23 11:09:44

Tests(0/20):


#include<cstdio> #include<algorithm> #include<ctype.h> #include<cstring> #include<iostream> #include<vector> #include<queue> #include<ctime> #include<cmath> #include<queue> #include<map> #include<set> #include<unordered_map> #include<stack> #define pr pair<int,int> #define eps 1e-8 #define ll long long using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();} return x*f; } pr a[(1<<15)+1]; int b[(1<<15)+1],ovo; int k; void pre_work(int num) { a[1]=make_pair(0,(1<<k)-1); int tot=1,last=1; while(num--) { for(int i=last;i>=1;i--) { int mid=(a[i].first+a[i].second)>>1; int qwq=mid+1; if(a[i].second<a[i].first) swap(mid,qwq); a[++tot]=make_pair(a[i].second,qwq); a[i].second=mid; } last=tot; } } int ask(int x) { // printf("AWA::%lld\n",x); int y=b[(x>>ovo)+1]; if(a[y].second>a[y].first) x=x-a[y].first+1; else x=a[y].first-x+1; // printf("(%lld, %lld)\n",x,y); if(a[x].second>a[x].first) return a[x].first+y-1; else return a[x].first-y+1; } ll query(ll l,ll r) { if(l&1) { l++; if(r&1) return ((r-l+1)>>1)*((1<<k)-1)+ask(l-1); else return --r,(((r-l+1)>>1)*((1<<k)-1))+ask(l-1)+ask(r+1); } else { if(r&1) return (((r-l+1)>>1)&1)?(1<<k)-1:0; else return --r,((((r-l+1)>>1)&1)?(1<<k)-1:0)^ask(r+1); } } const int Mod=1e9+7; int m; ll l,r,A,B,C,h; int main() { k=read(); m=read(),l=read(),r=read(),A=read(),B=read(),C=read(); int num=k>>1;ovo=num; int n=(1<<k); pre_work(num); for(int i=1;i<=ovo;i++) b[(a[i].second>>num)+1]=i; for(int i=1;i<=m;i++) { h=((l^r^h^query(l,r))+C)%Mod; l=((l^A^h)%(n+1))%n; r=((r^B^h)%(n-l))+l; } // for(int i=0;i<(1<<k);i++) // printf("!!! %lld\n",ask(i)); // printf("?? %lld\n",ask(15)); printf("%lld\n",h); return 0; }


测评信息: