您的位置:首页 > 其它

[SDOI2016]部分题选做

2016-07-21 11:58 295 查看

听说SDOI蛮简单的,但是SD蛮强的..

之所以是选做,是因为自己某些知识水平还不到位,而且目前联赛在即,不好花时间去学sa啊之类的..

bzoj4513储能表&bzoj4514数字配对

已写题解

BZOJ4515 07/28

感人的提交记录啊。。。。。。

1566875 wxx_louisa 4515 Accepted 36612 kb 13936 ms C++/Edit 5099 B 2016-07-28 23:51:33
1566874 orzliyicheng 4515 Accepted 36612 kb 13708 ms C++ 5099 B 2016-07-28 23:51:20
1566873 wxx 4515 Accepted 36604 kb 13920 ms C++ 5099 B 2016-07-28 23:50:52
1566871 wxx 4515 Wrong_Answer 35956 kb 720 ms C++ 5028 B 2016-07-28 23:41:29
1566859 wxx 4515 Wrong_Answer 35960 kb 768 ms C++ 5065 B 2016-07-28 23:14:24
1566848 wxx_louisa 4515 Wrong_Answer 35956 kb 696 ms C++/Edit 4993 B

2016-07-28 22:52:00

 

说实话我还真没想到这道题可以调这么久。。。。感觉身体被掏空。。。。

maintain()写错,A,B搞反,ins没调用。。。。树链剖分的时候dep比较错。。。top还每次忘记打。。。。。。zz

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 50020
using namespace std;
int cas,n,maxq;
int a
,sg[30][30],flag[500];
void solve(){
memset(sg,0,sizeof(sg));
int s2=0,s3=0,x=n;
while(x>=2)++s2,x/=2;
x=n;while(x>=3)++s3,x/=2;
for(int i=0;i<=s2;i++)//a
for(int j=0;j<=s3;j++){//b
memset(flag,0,sizeof(flag));
for(int p=1;p<=i;p++)
for(int q=1;q<=maxq&&p*q<=i;q++){
int o,k;
for(o=-1,k=1;k<=q;k++){
if(o==-1)o=sg[i-p*k][j];else o=o^sg[i-p*k][j];
}
if(o!=-1)flag[o]=1;
}
for(int p=1;p<=j;p++)
for(int q=1;q<=maxq&&p*q<=j;q++){
int o,k;
for(o=-1,k=1;k<=q;k++){
if(o==-1)o=sg[i][j-p*k];else o=o^sg[i][j-p*k];
}
if(o!=-1)flag[o]=1;
}
for(int d=0;;d++){
if(flag[d]==0){
sg[i][j]=d;break;
}
}
}
}
int main()
{
scanf("%d",&cas);
while(cas--){
scanf("%d%d",&n,&maxq);
int ans=0;
solve();
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i])continue;
int x=i,s2=0,s3=0;
while(x%2==0){s2++;x/=2;}
while(x%3==0){s3++;x/=3;}
ans=ans^sg[s2][s3];
}
if(ans==0)printf("lose\n");else printf("win\n");
}
}
sg函数

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: