谁能救救我的70分!!!!

P1053 [NOIP2005 提高组] 篝火晚会

``` #include<bits/stdc++.h> int goal[50010]; int n; int pop[50010][2]; int ans[50010]; int read() { int ans=0; char ch=getchar(); while(ch>'9'||ch<'0')ch=getchar(); while(ch<='9'&&ch>='0') { ans=ans*10+ch-'0'; ch=getchar(); } return ans; } int set_what(int x,int m,int y,int z)//这个数是x,存放在goal[m],是从y位置拓展来的,再往左(-1)右(1)拓展; { if(x==1) { goal[1]=1; goal[2]=pop[x][0]; goal[n]=pop[x][1]; if(!set_what(goal[2],2,1,1)||!set_what(goal[n],n,1,-1))return 0; else return 1; } else if(pop[x][0]==goal[y]||pop[x][1]==goal[y]) { if(pop[x][0]==goal[y]) { if(goal[m+z]!=0) { if(goal[m+z]!=pop[x][1]) { return 0; } } if(goal[m+z]==0) { goal[m+z]=pop[x][1]; if(!set_what(goal[m+z],m+z,m,z)) { return 0; } } } else if(pop[x][1]==goal[y]) { if(goal[m+z]!=0) { if(goal[m+z]!=pop[x][0]) { return 0; } } if(goal[m+z]==0) { goal[m+z]=pop[x][0]; if(!set_what(goal[m+z],m+z,m,z)) { return 0; } } } } else if(pop[x][0]!=goal[y]&&pop[x][1]!=goal[y]) return 0; return 1; } int main() { n=read(); for(int i=1;i<=n;i++) for(int j=0;j<=1;j++) pop[i][j]=read(); if(set_what(1,1,1,1)==0)printf("-1"); else { int what=0; for(int i=1;i<=n;i++) { if(goal[i]-i<0) { ans[goal[i]-i+n]++; what=what>ans[goal[i]-i+n]?what:ans[goal[i]-i+n]; } else { ans[goal[i]-i]++; what=ans[goal[i]-i]>what?ans[goal[i]-i]:what; } } memset(ans,0,sizeof(ans)); for(int i=n;i>=1;i--) { if(goal[i]-i<0) { ans[goal[i]-i+n]++; what=what>ans[goal[i]-i+n]?what:ans[goal[i]-i+n]; } else { ans[goal[i]-i]++; what=ans[goal[i]-i]>what?ans[goal[i]-i]:what; } } printf("%d",n-what); } } ```
by _Decade_ @ 2018-08-25 18:35:43


新人发帖,不好意思。。。
by _Decade_ @ 2018-08-25 18:36:04


不知是不是妹子,溜了溜了
by kl膜法59改 @ 2018-08-25 19:01:36


|