2016 CCPC東北賽區 簡單三少(proA+proC+proE)
阿新 • • 發佈:2018-12-13
給你一棵樹,有n個節點,編號從1~n,每兩個節點之間都有一條邊權值為兩個節點編號的最小公倍數。問最小生成樹的權值和為多少?
簡單題,最小公倍數是本身,即最小生成樹為和(除1以外)
#include<cstdio>
typedef long long ll;
int main(){
int T,t=1;
scanf("%d",&T);
ll n;
while(T--){
scanf("%lld",&n);
printf("Case #%d: %lld\n",t++,n*(n+2)/2-1);
}
return 0;
}
給兩個數A,B,找到所有的C,D滿足其表示式
由於A,B是區間的兩個端點,所以A/B + B/A 已經就是最大值了。
所以當A=B 時答案就是A,B;當不相等時,答案為A,B和B,A
#include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; int main(){ int T,t=1; ll x,y; scanf("%d",&T); while(T--){ scanf("%lld %lld",&x,&y); printf("Case #%d:\n",t++); if(x>y) swap(x,y); if(x==y){ printf("1\n%lld %lld\n",x,y); } else { printf("2\n%lld %lld\n",x,y); printf("%lld %lld\n",y,x); } } return 0; }
相同的格子只有相連或者在同一臺邊上的才能消掉,問圖中是否有能消掉的格子。
判斷邊上和內部即可。
#include<cstdio> int a[35][35]; int main(){ int T,n,m,t=1; scanf("%d",&T); while(T--){ scanf("%d %d",&n,&m); for(int i=0;i<n;i++){ for(int j=0;j<m;j++) scanf("%d",&a[i][j]); } int cnt=0; for(int i=0;i<m;i++) //第一行 for(int j=i+1;j<m;j++) if(a[0][i]==a[0][j]) cnt++; for(int i=0;i<m;i++) //最後一行 for(int j=i+1;j<m;j++) if(a[m-1][i]==a[m-1][j]) cnt++; for(int i=0;i<n;i++) //第一列 for(int j=i+1;j<n;j++) if(a[i][0]==a[j][0]) cnt++; for(int i=0;i<n;i++) //最後一列 for(int j=i+1;j<n;j++) if(a[i][n-1]==a[j][n-1]) cnt++; if(cnt>0) printf("Case #%d: Yes\n",t++); else{ for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(a[i][j]==a[i+1][j]||a[i][j]==a[i][j+1]) cnt++; if(cnt>0) printf("Case #%d: Yes\n",t++); else printf("Case #%d: No\n",t++); } } }