脑瘫考试,脑瘫数据
T1我们机房都不会然后打了一个DFS草草了事,但是成绩出来,我吓一跳
T1都是六七十,都是和我一样的打的暴力,但是我30,我一开始觉得是我的代码没优化,结果发现都没优化,但是我的代码是30,其他人是64(快读70),
两个代码如下:(猜猜哪个代码是30分的)
#include<bits/stdc++.h>
#define int long long
#define N 200010
using namespace std;
const int P=1e9+7;
int n,m,sd[N][2],ans,vis[N];
void dfs(int x)
{
if(x==n+1)
{
ans=(ans+1)%P;
return ;
}
if(!vis[sd[x][0]])
{
vis[sd[x][0]]=1;
dfs(x+1);
vis[sd[x][0]]=0;
}
if(sd[x][0]==sd[x][1])
return ;
if(!vis[sd[x][1]])
{
vis[sd[x][1]]=1;
dfs(x+1);
vis[sd[x][1]]=0;
}
return ;
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)
{
int a,b;
scanf("%lld%lld",&a,&b);
sd[i][0]=a;
sd[i][1]=b;
}
dfs(1);
cout<<ans%P<<endl;
return 0;
}
#include<bits/stdc++.h>
// #define int long long
#define max(A,B) (A<B?B:A)
#define min(A,B) (A>B?B:A)
#define bug cout<<"I AK IOI"<<endl;
using namespace std;
const int N=201,mod=1e9+7;
int n,m,w[201][3],ans,vis[N];
void dfs(int x){
if(x==0){
ans++;ans%=mod;
return ;
}
if(!vis[w[x][1]]) vis[w[x][1]]=1,dfs(x-1),vis[w[x][1]]=0;
if(w[x][1]==w[x][2])
return ;
if(!vis[w[x][2]]) vis[w[x][2]]=1,dfs(x-1),vis[w[x][2]]=0;
}
signed main(){
scanf("%d%d",&n,&m);
if(n>200){
cout<<0;
return 0;
}
for(int i=1;i<=n;i++)
scanf("%d%d",&w[i][1],&w[i][2]) ;
dfs(n);
cout<<ans%mod;
return 0;
}
两个都是很简短的DFS,但是分数天差地别
后来我才知道,原来从n到1和从1到n分数是不一样的,1-n快,n-1慢,但是我觉得时间复杂度是一样的
所以是因为数据还是因为时间复杂度就是慢?