欢迎来到清街老酒的博客

どんな別れがあったとしても、出会ったことには必ず意味がある

Codeforces Round #666 (Div. 2)

Codeforces Round #666 (Div. 2)

A.Juggling Letters

题意:给n个字符串,可以将任意字符串的一个字符插到其他字符串任意位置,问能否使n个字符串相等。
思路:统计n个字符串所有字符出现的个数,如果都为n的倍数则YES,反之为NO;

#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize ("unroll-loops")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<string>
#include<queue>
#include<map>
#include<stack>
#include<iostream>
#define INF 0x3f3f3f3f
#define lowbit(a) ((a)&-(a))
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
string str;
int a[40],flag;
int main()
{
	int t,n;
	scanf("%d",&t); 
	while(t--)
	{
		memset(a,0,sizeof(a));
		flag=0;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
		cin>>str;
		for(int j=0;j<str.size();j++)
		{
			a[str[j]-'a'+1]++;
		}
		}
		if(n==1)
		{
					cout<<"YES"<<endl;
					continue;
		}
		for(int i=0;i<=39;i++)
		{
			if(a[i]%n!=0)
			{
				flag=1;
				break;
			}	
		}
		if(flag)
		cout<<"NO"<<endl;
		else
		cout<<"YES"<<endl;
	}
}

B. Power Sequence

题意:给一个数组a,任意排序后,a[i]加一或减一都为一个步骤,问最少需要几步使a[i]成为c为底,从c^0开始的等比数列。
思路:枚举所有可能的c,找到最小值,开long long,注意溢出。

#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize ("unroll-loops")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<string>
#include<queue>
#include<map>
#include<stack>
#include<iostream>
#define INF 0x3f3f3f3f
#define lowbit(a) ((a)&-(a))
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
long long i,n,c,cnt,ans,q=1,a[100005];

int main()
{
	scanf("%lld",&n);
	ans=-n;
	for (i=0;i<n;i++) 
	{
		scanf("%lld",&a[i]);
		ans+=a[i];
	}
	sort(a,a+n);
	for (c=1; c<=1000000; c++)
	{
		cnt=0;q=1;
		for (i=0;i<n;i++)
		{
			if (q>a[i]) 
			cnt+=q-a[i];
			else 
			cnt+=a[i]-q;
			q=q*c;
			if(cnt>=ans)
			break;
		}
		if (cnt<ans) 
		ans=cnt;
	}
	printf("%lld\n",ans);
}

C. Multiples of Length

题意:给一个数组a,可以进行一种操作,使[l,r]区间上的a[i]加上任意倍的区间长度的值,当且仅当进行三次操作,使数组a所有元素变为0.
思路:构造题,当n为一时,第一步减a[1],第二步+0,第三步+0;
当n不为一时,第一步,前n-1项加上\((n-1)*a[i]\)。第二步,将第n项置为0。第三步,将前n项,减去\(n*a[i]\)

#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize ("unroll-loops")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<string>
#include<queue>
#include<map>
#include<stack>
#include<iostream>
#define INF 0x3f3f3f3f
#define lowbit(a) ((a)&-(a))
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
ll a[100005];
int main()
{
	int n;
	scanf("%d",&n); 
	for(int i=1;i<=n;i++)
	cin>>a[i];
	if(n==1)
	{
		printf("1 1\n%lld\n1 1\n0\n1 1\n0\n",-a[1]);
		return 0;
	}
	printf("1 %d\n",n-1);
	for(int i=1;i<=n-1;i++)
	printf("%lld ",a[i]*(n-1));
	printf("\n");
	printf("%d %d\n%lld\n",n,n,-a[n]);
	printf("1 %d\n",n);
	for(int i=1;i<=n-1;i++)
	printf("%lld ",-a[i]*n);
	printf("0\n");
}

D. Stoned Game

题意:2个人玩游戏,有n堆石头,一人拿一个石头,下一个人不能从上一个人拿过的堆拿石头,不能拿则失败。
思路:博弈论。若最多的那堆石头,比其他所有石头加起来还多,先手胜。
否则,判断奇偶性,奇先手胜,偶后手胜。

#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize ("unroll-loops")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<string>
#include<queue>
#include<map>
#include<stack>
#include<iostream>
#define INF 0x3f3f3f3f
#define lowbit(a) ((a)&-(a))
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

int main()
{
	int t,n,x,mmax,sum;
	scanf("%d",&t); 
	while(t--)
	{
		mmax=-INF,sum=0;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>x;
			mmax=max(mmax,x);
			sum+=x;
		}
		if(mmax>sum-mmax||(sum&1))
		cout<<"T"<<endl;
		else
		cout<<"HL"<<endl;
	}
}
posted @ 2020-08-31 13:50  清街老酒  阅读(217)  评论(0编辑  收藏  举报