1. 程式人生 > >2016 CCPC東北賽區 簡單三少(proA+proC+proE)

2016 CCPC東北賽區 簡單三少(proA+proC+proE)

給你一棵樹,有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++);
		}
	}
}