Codeforces Round #269 (Div. 2) A B C

A:MUH and Sticks

水题

#include<bits/stdc++.h>
using namespace std;

int a[10]={0};

int main(){
	int c;
	for(int i=0;i<6;i++){
		cin>>c;
		a[c]++;
	}
	bool flag=false;
	for(int i=1;i<=9;i++){
		if(a[i]>=4) {
			a[i]-=4;
			flag=true;
		}
	}
	if(!flag) cout<<"Alien\n";
	else{
		flag=false;
		for(int i=1;i<=9;i++)
			if(a[i]==2) flag=true;
		if(flag) cout<<"Elephant\n";
		else cout<<"Bear\n";
	}
	return 0;
}

  

B:MUH and Important Things

只要难度相同的个数大于三个,或者存在至少两种难度的个数为2

如果某个难度相同的数大于等于有三个,那么可以正序、逆序、乱序(从第二个开始输出)

如果存在两种或以上难度的个数为2,将正序、逆序、一个正序其余逆序

#include<bits/stdc++.h>
using namespace std;
 
int n;
vector<int> a[2100];
int p[2100]={0};
int main(){
	cin>>n;
	int c;
	for(int i=1;i<=n;i++){
		cin>>c;
		a[c].push_back(i);
	}
	int sum=1;
	for(int i=1;i<=2000;i++){
		if(a[i].size()>0)sum*=a[i].size();
		if(sum>=3) break;
	}
	if(sum>=3){
		cout<<"YES\n";
		bool flag=false;
		for(int i=0;i<=2000;i++){
			for(int j=0;j<a[i].size();j++){
				cout<<(flag?" ":"")<<a[i][j];
				flag=true;
			}
		}
		cout<<"\n";
		flag=false;
		for(int i=0;i<=2000;i++){
			for(int j=a[i].size()-1;j>=0;j--){
				cout<<(flag?" ":"")<<a[i][j];
				flag=true;
			}
		}
		cout<<"\n";
		flag=false;
		bool bb=false;
		for(int i=0;i<=2000;i++){
			if(bb==true||a[i].size()>2)
			for(int j=1;j<a[i].size()+1;j++){
				cout<<(flag?" ":"")<<a[i][j%(a[i].size())];
				flag=true;
			}
			else{
				if(a[i].size()==2) bb=true;
				for(int j=0;j<a[i].size();j++){
					cout<<(flag?" ":"")<<a[i][j];
					flag=true;
			 	}
			}	
		}
		cout<<"\n";
	}
	else{
		cout<<"NO\n";
	}
	return 0;
}

  

C:MUH and House of Cards

 题意:求n个木棒,可以搭成多少种不同高度的塔,n个木棒全部用完,

搭成 高度为 i 的塔,需要 d[i] 个木棒,剩余的木棒可以全部放在最底层 每多一个房间需要3个木棒

所以 (n - d[i])  % 3 == 0 ,那么用n个木棒就可以搭成高度为 i 的塔

d[i] = d[i - 1] + 3 * i -1;

#include<bits/stdc++.h>
using namespace std;
const int N=2e6+100;
typedef long long ll;
ll n;
ll d[N];
int main(){
	cin>>n;
	d[0]=0;
	for(int i=1;i<=(int)sqrt(n);i++){
		d[i]=(ll)i*2+(ll)(i-1)+d[i-1];
	}
	int res=0;
	for(int i=1;i<=(int)sqrt(n);i++){
		if(n<d[i]) break;
		ll tmp=n-d[i];
		if(tmp%3==0) res++;
	}
	cout<<res<<"\n";
	return 0;
}

  

posted @ 2019-07-12 11:56  Pikachu_Yj  阅读(120)  评论(0编辑  收藏  举报