- 1、[P3958 [NOIP2017 提高组] 奶酪](https://www.luogu.com.cn/problem/P3958)
- 2、[P3952 [NOIP2017 提高组] 时间复杂度](https://www.luogu.com.cn/problem/P3952)
- 3、[P1850 [NOIP2016 提高组] 换教室](https://www.luogu.com.cn/problem/P1850)
- 4、[P2668 [NOIP2015 提高组] 斗地主](https://www.luogu.com.cn/problem/P2668)
算法思路:深搜?!
可能的思路:并查集
(代码有一处智商错误,已改正)
#includeusing namespace std; int T; int a[1010][1010]; int vis1[1010];//up int vis2[1010];//down int vis[1010];//colour int n,h,r; int x[1010],y[1010],z[1010]; bool f=false; int cha(int tt,int t){ if(tt>t) return tt-t; else return t-tt; } bool check(int i,int j){ double dist=0; int xx=cha(x[i],x[j]); int yy=cha(y[i],y[j]); int zz=cha(z[i],z[j]); dist=sqrt((long double)xx*xx+(long double)yy*yy+(long double)zz*zz); if(dist<=2.0*r) return true; else return false; } void connect(){ for(int i=1;i<=n;i++){ if(z[i]+r>=h) vis1[i]=1; if(r>=z[i]) vis2[i]=1; } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ if(check(i,j)){ a[i][j]=a[j][i]=1; } } } } void colour(int x){ vis[x]=1; for(int i=1;i<=n;i++){ if(a[x][i]&&vis[i]==0){ colour(i); } } } int main(){ //freopen("cheese.in","r",stdin); //freopen("cheese.out","w",stdout); scanf("%d",&T); while(T--){ memset(a,0,sizeof(a)); memset(vis1,0,sizeof(vis1)); memset(vis2,0,sizeof(vis2)); memset(vis,0,sizeof(vis)); memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); memset(z,0,sizeof(z)); f=false; scanf("%d %d %d",&n,&h,&r); for(int i=1;i<=n;i++){ scanf("%d %d %d",&x[i],&y[i],&z[i]); } connect(); for(int i=1;i<=n;i++){ if(vis2[i]==1){ colour(i); } } for(int i=1;i<=n&&f==false;i++){ if(vis1[i]&&vis[i]) f=true; } if(f) puts("Yes"); else puts("No"); } return 0; }
估分:80
实际得分:10(原)=>100 ???
反思:写题目要细心!智商要在线! 还有就是在判断大多数情况的主要代码没写好时最好不要先排除一些特殊情况,防止有认为主要代码OK其实有漏洞的情况。
算法思路:???
可能的思路
27分代码。。。
#includeusing namespace std; int t,len,comp,tot=-1,cnt; string bin,com,body; int name[200]; bool f=false; int getnum(string x,int f,int r){ int ans=0; for(int i=f;i<=r;i++){ ans*=10; ans+=x[i-1]-'0'; } return ans; } void clean(){ memset(name,0,sizeof(name)); f=false; tot=-1; cnt=0; } int main(){ freopen("complexity.in","r",stdin); freopen("complexity.out","w",stdout); scanf("%d",&t); while(t--){ clean(); scanf("%d",&len); if(len%2!=0){ for(int i=0;i<=len;i++) getline(cin,bin); puts("ERR");continue; } getchar(); getline(cin,com); if(com[2]=='1') comp=0; else comp=getnum(com,5,com.size()-1); stack ord; for(int i=1;i<=len&&f==false;i++){ getline(cin,body); if(body[0]=='F'){ ord.push('F'); if(name[body[2]]) f=true; else name[body[2]]=1; if(body[4]=='n'){ if(body[6]!='n') tot=cnt; } else{ int i=5; while(body[i-1]!=' ') i++; int l=getnum(body,5,i-1); i++; if(body[i-1]=='n'){ ord.pop(); ord.push('f'); cnt++; } else{ int r=getnum(body,i,body.size()); if(l>r) tot=cnt; } } } else{ if(ord.empty()) f=true; else { if(ord.top()=='f'){ tot=max(tot,cnt); cnt--; } ord.pop(); } } } if(!ord.empty()) f=true; if(f) puts("ERR"); else{ if(tot==-1) tot=cnt; if(tot==comp) puts("Yes"); else puts("No"); } } return 0; }
估分:30
实际得分:27
反思:思维混乱是考场大忌,哪怕多想一点也最好不要乱写
(真的改不对。。。)
算法思路:???
可能的思路:Floyd+DP
算法思路:???
可能的思路:给我搜??
总结:该骗分时要骗分,该思考时要思考。
嗑题要仔细。
蒟蒻的国庆模拟赛(一)
——2021.10.3



