zoukankan      html  css  js  c++  java
  • 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
    ",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
    %lld
    1 1
    0
    1 1
    0
    ",-a[1]);
    		return 0;
    	}
    	printf("1 %d
    ",n-1);
    	for(int i=1;i<=n-1;i++)
    	printf("%lld ",a[i]*(n-1));
    	printf("
    ");
    	printf("%d %d
    %lld
    ",n,n,-a[n]);
    	printf("1 %d
    ",n);
    	for(int i=1;i<=n-1;i++)
    	printf("%lld ",-a[i]*n);
    	printf("0
    ");
    }
    

    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;
    	}
    }
    
  • 相关阅读:
    [leetCode]Reverse Words in a String
    [leetCode]Word Break
    [leetCode]Unique Binary Search Trees
    [leetCode]Binary Tree Inorder Traversal 递归 && 栈解法
    [leetCode]Binary Tree Zigzag Level Order Traversal
    [leetCode]Binary Tree Level Order Traversal
    [leetCode]Binary Tree Maximum Path Sum
    freemarker生成静态页面中文乱码(固定中文和动态生成的中文都乱码)
    多线程-安全的终止线程
    多线程-理解中断
  • 原文地址:https://www.cnblogs.com/qingjielaojiu/p/13589136.html
Copyright © 2011-2022 走看看