19-10-24-H
H H H H H H
ZJ一下:
T1只会暴力,测试点分治。
(表示作者的部分分并没有给够,暴力加部分表按测试点分类可以得60吧……)
T2先直接手玩第一个子任务。
然后就$Find$了一个神奇的(?)性质(其实是$dp$的柿子)
发现只要可以从一个必败状态转移到就是必胜的,如果无法从任何一个必败状态转移过来就是仍是必败状态。
于是码好了$\Theta(N^4)$的暴力加一个测试点分治。
T3没啥时间打,连样例都没测$QAQ$(最后果然WA0了)就丢上去了。
Finally:
|
33
|
Miemeng | 20
03:16:04
|
70
03:16:04
|
0
03:19:46
|
90
03:19:46
|
$T1$为啥只有暴力分?
这是TJ:
T1
直接统各位的$xor$即可;
如何统?
可以发现:
%%%Yu-shi
$$
0000000\\
0000001\\
0000010\\
0000011\\
0000100\\
0000101\\
0000110\\
0000111\\
0001000\\
0001001\\
0001010\\
0001011\\
0001100\\
0001101\\
0001110\\
0001111\\
0010000\\
\vdots
$$
这是有循环节的,直接前缀和做差。
#include <iostream>
#include <cstring>
#include <cstdio>
#define LL long long
using namespace std;
const int Mod=1e9+7;
LL cna0,cna1,cnb0,cnb1;
LL ans;
int main(){
ios_base::sync_with_stdio(false);
LL T,a,b,dat,lft;
cin>>T;
while(T--){
ans=0;
cin>>a>>b;
for(int k=1;k<=30;k++){
LL i=1<<k;
dat=(a/i)*i;//cout<<"WholeA:"<<dat<<endl;
lft=a-dat; //cout<<"LftA:"<<lft<<endl;
if(lft<=i/2){
cna0=lft;
cna1=0;
}
else{
cna0=i/2;
cna1=lft-i/2;
}
cna0+=dat/2;
cna1+=dat/2;
dat=((b+1)/i)*i;//cout<<"WholeB:"<<dat<<endl;
lft=(b+1)-dat; //cout<<"LftB:"<<lft<<endl;
if(lft<=i/2){
cnb0=lft;
cnb1=0;
}
else{
cnb0=i/2;
cnb1=lft-i/2;
}
cnb0+=dat/2;
cnb1+=dat/2;
//cout<<"Bit:"<<k<<endl\
<<"A_1:"<<cna1<<endl\
<<"A_0:"<<cna0<<endl\
<<"B_1:"<<cnb1<<endl\
<<"B_0:"<<cnb0<<endl;\
cout<<(cnb1-cna1)<<" "<<(cnb0-cna0)<<endl;
ans+=(cnb1-cna1)%Mod*(cnb0-cna0)%Mod*(i/2)%Mod;
ans%=Mod;
}
cout<<ans*2%Mod<<endl;
}
}
T2
类似埃筛?
直接刷表。
必败情况很少,$N^2$级别。
于是直接用必败去刷表就可以$N^3$过。
#include <iostream>
#include <cstring>
#include <cstdio>
#define N 333
using namespace std;
char dp[N][N][N];
int main(){
for(int i=0;i<=300;i++){
for(int j=0;j<=300;j++){
for(int k=0;k<=300;k++){
if(dp[i][j][k]==0){
for(int a=i+1;a<=300;a++)
dp[a][j][k]=1;
for(int a=j+1;a<=300;a++)
dp[i][a][k]=1;
for(int a=k+1;a<=300;a++)
dp[i][j][a]=1;
int lim=300-max(i,j);
for(int a=1;a<=lim;a++)
dp[i+a][j+a][k]=1;
lim=300-max(i,k);
for(int a=1;a<=lim;a++)
dp[i+a][j][k+a]=1;
lim=300-max(k,j);
for(int a=1;a<=lim;a++)
dp[i][j+a][k+a]=1;
lim=300-max(i,max(j,k));
for(int a=1;a<=lim;a++)
dp[i+a][j+a][k+a]=1;
}
}
}
}
ios_base::sync_with_stdio(false);
int T,a,b,c;
cin>>T;
while(T--){
cin>>a>>b>>c;
cout<<(dp[a][b][c]==0?"No":"Yes")<<endl;
}
}
T3
$gugugu$
Miemeng真的蒻

浙公网安备 33010602011771号