标签:style blog class code c tar
题意:
就是一个人走到一个城市就会记录与该城市相连的城市有多少,最后判断这些城市是否全部相连;
8
7 7 4 3 3 3 2 1
10
5 4 3 3 2 2 2 1 1 1
NO YES
解题思路:
其实就是判断无向连通图,sum<=(t)*(t-1)/2公式,sum是边长的和,t是顶点个数。不过需要注意的有几点。1、是当输入有0的时候直接就是no
因为肯定不可能全部连通。2.是当输入等于2的时候可能这个公式判断不了需要自己做处理。
忘了写了打表的代码起就是用数组写的模拟过程,模拟是对的会超时,所以可以用这个打表这个代码也发上来吧,没有写注释
#include<iostream> #include<stdio.h> #include<vector> #include<iterator> #include<cstring> using namespace std; int pp[11005]; int main() { int n; while(scanf("%d",&n)!=EOF) { memset(pp,0,sizeof(pp)); int temp=2; int it,itr; int len= n; int ccc=0; while(temp<=len) { ccc++; cout<<temp<<","; int i=0,res=0; for(it=1;it<=n;it++) { if(pp[it]) continue; i++; if(i==temp) { len--; pp[it]=1; i=0; } } for(itr=temp+1;itr<=n;itr++) { if(!pp[itr]) { temp=itr; break; } } } //cout<<ccc<<")))))"; // printf("%d\n",len); } system("pause"); return 0; }
下面是AC代码
具体代码:
#include<iostream> #include<cstring> using namespace std; int num[10005]; int main() { int t,sum,res; while(scanf("%d",&t)!=EOF) { sum=0; res=0; memset(num,0,sizeof(num)); for(int i=0;i<t;i++) { cin>>num[i]; sum+=num[i]; if(num[i]==0) res=1; } if(t==2) { if(sum==2&&res==0) cout<<"YES"<<endl; else cout<<"NO"<<endl; } else { if(sum<=(t)*(t-1)/2&&res==0) cout<<"YES"<<endl; else cout<<"NO"<<endl; } } system("pause"); return 0; }
辽宁省赛——杨鲁斯卡尔专场-J,布布扣,bubuko.com
标签:style blog class code c tar
原文地址:http://www.cnblogs.com/baoluqi/p/3731912.html