Codeforces Round #426 (Div. 2) A B C The Meaningless Game

A. The Useless Toy

 题意:图片中有四个符号,V < ^ >, 按照顺时针从左到右变换


题目要求输入两个 上述字符,然后输入一个n, 第一个变换 n次变换好第二个字符是顺时针变换,还是逆时针变换,都不满足则输出“undifined”


#include<bits/stdc++.h>
using namespace std;
using namespace std;
char a,b;
char ch[4]={'v','<','^','>'};
int n;
int main()
{
    cin>>a>>b>>n;
    n%=4;
    int t1,t2;
    for(int i=0;i<4;i++)
    {
        if(ch[i]==a)        t1=i;
        else if(ch[i]==b)    t2=i;
    }
    t2=(t2+4)%4;
    if(ch[(n+t1+4)%4]==ch[t2]&&ch[(t1-n+4)%4]!=ch[t2])      cout<<"cw"<<endl;
    else if(ch[(-n+t1+4)%4]==ch[t2]&&ch[(n+t1+4)%4]!=ch[t2])  cout<<"ccw"<<endl;
    else  cout<<"undefined"<<endl;
    return 0;
}



B. The Festive Evening

直接暴力,标记每个字母的首次出现位置和最后出现位置, 将起始位置和最终位置看成一个区间, 求26个字母也就是26个区间的最大重叠数,也就是某一个数 i 处在的区间最多。


#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000100 ;
typedef long long ll;
#define cle(n) memset(n,0,sizeof(n))
using namespace std;

char s[maxn];
int n,k;
int first[maxn],last[maxn];
int a[maxn];
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)  cin>>s[i];
    if(k==26) cout<<"NO"<<endl;
    else
    {
        cle(first); cle(last);
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            if(first[s[i]-'A']==0)
            {
                first[s[i]-'A']=i;
            }
            last[s[i]-'A']=i;
        }

       for(int i=0;i<26;i++)
       {
           for(int j=first[i];j<=last[i];j++)
               a[j]++;
       }

       for(int i=1;i<=n;i++)
        ans=max(ans,a[i]);

     if(k>=ans) cout<<"NO"<<endl;
     else       cout<<"YES"<<endl;
    }

    return 0;
}




C. The Meaningless Game

 题目大意: 输入一个n,然后再输入n行,每行有两个数a和b,表示玩游戏的两个人的分数(人和狗玩游戏)。问两个人的分数是否是符合游戏规则。

   规则为,两个人初始分数为1,任意找一个自然数k,如果一个人赢则其分数乘以k^2,输的人乘以k,问有没有可能实现给出的分数。

解题思路:数学题

 输入a,b, 假设得出的结论由四个自然数形成, 则结果大致为 a= (k1^2) *k2*(k3^2)*k4 和b= k1*(k2^2)*k3*(k4^2) 这样的形式。 当两个数相乘结果为 (k1^3)*(k2^3)*(k3^3)*(k4^3)。 可以对该数求出其三次方根 temp = k1*k2*k3*k4.   则 有 x=a/temp= k1*k3, y=b/temp= k2*k3;   如果有x*x*y==a&&y*y*x==b 则可以判断答案是否正确。


#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int main()
{
    int n; ll a,b;
  scanf("%d",&n);
    while(n--)
    {
        scanf("%I64d %I64d",&a,&b);   //此处用cin会超时
        ll c=cbrt(a*b);       //求一个数的三次方程
        ll x=a/c, y=b/c;
        bool flag= (x*x*y==a)&&(y*y*x==b);
        puts(flag?"Yes":"No");
    }
    return 0;
}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值