Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #define SOL 1
- #define BRUT 0
- #define OPTIM 1
- #define SUB_OPTIM 3
- #define COMB 2
- #define SUB_COMB 4
- #define C(u,v) (((u)&(v))==0)
- using namespace std;
- ifstream f("xor1.in");
- ofstream g("xor1.out");
- void brut();
- void optim();
- void comb();
- void sub_optim_log();
- void sub_comb_log();
- int n,m,i,j,k,q,b,sol,A,B,mod,aux,x[1020][1020],Clog(int,int);
- int main()
- {
- if(SOL==BRUT)brut();
- if(SOL==SUB_OPTIM)sub_optim_log();
- if(SOL==OPTIM)optim();
- if(SOL==SUB_COMB)sub_comb_log();
- if(SOL==COMB)comb();
- return 0;
- }
- void brut()
- {
- f>>q>>n>>m>>A>>B>>mod;
- for(j=1;j<mod;j++)
- x[0][j]=j;
- for(i=1;i<mod;i++)
- for(j=1;j<mod;j++)
- x[i][j]=x[i-1][j]^x[i][j-1];
- for(;q;q--)
- {
- g<<x[n][m]<<'\n';
- m=(1LL*A*m+B)%mod;
- n=(1LL*A*n+B)%mod;
- }
- }
- void optim()
- {
- f>>q>>n>>m>>A>>B>>mod;
- for(;q;q--)
- {
- for(b=1,sol=0;b<=(1<<30)&&m>=b;b<<=1)
- if(C(m-b,n+b))
- sol|=b;
- g<<sol<<'\n';
- m=(1LL*A*m+B)%mod;
- n=(1LL*A*n+B)%mod;
- }
- }
- void sub_optim_log()
- {
- f>>q>>n>>m>>A>>B>>mod;
- for(;q;q--)
- {
- for(b=1,sol=0;b<=(1<<30)&&m>=b;b<<=1)
- if(Clog(m-b,n+b))
- sol|=b;
- if(sol)g<<sol;
- m=(1LL*A*m+B)%mod;
- n=(1LL*A*n+B)%mod;
- }
- }
- void comb()
- {
- f>>q>>n>>m>>A>>B>>mod;
- for(;q;q--)
- {
- for(j=0,k=m,sol=0;k;j++,k--)
- if(C(n-1,j))
- sol^=k;
- if(sol)g<<sol;
- m=(1LL*A*m+B)%mod;
- n=(1LL*A*n+B)%mod;
- }
- }
- void sub_comb_log()
- {
- f>>q>>n>>m>>A>>B>>mod;
- for(;q;q--)
- {
- for(j=0,k=m,sol=0;k;j++,k--)
- if(Clog(n-1,j))
- sol^=k;
- if(sol)g<<sol;
- m=(1LL*A*m+B)%mod;
- n=(1LL*A*n+B)%mod;
- }
- }
- int Clog(int u,int v)
- {
- if(u==0||v==0)return 1;
- int bu=u&(-u),bv=v&(-v);
- if(bu==bv)return 0;
- if(bu<bv)return Clog(u-bu,v);
- return Clog(u,v-bv);
- }
Add Comment
Please, Sign In to add comment