Educational Codeforces Round 125 (Rated for Div. 2)(A-C)

简介: 算法

A. Integer Moves


题意:

在平面直角坐标系上存在一个点(x,y),可以进行平移操作,要求每次移动后前后两点的坐标的距离开平方是整数


思路:

整理发现要么一次到位要么就需要两次变化,当然特判一下0的情况

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,i,j,t,a,b;
    cin>>t;
    map<int ,int >d1;
    for(i=0;i<=1050;i++){
            d1[i*i]=1;
    }
    while(t--)
    {
        cin>>a>>b;
        if(a==0&&b==0)
        {
            cout<<0<<endl;
        }
        else if(d1[a*a+b*b]!=0)
        {
            cout<<1<<endl;
        }
        else
        {
            cout<<2<<endl;
        }
    }
    return 0;
}


B. XY Sequence


题意:

构造一个长度为n的数列,要求他们的和不超过最大,并且单个元素不超过B,且a[i]=a[i-1]+x或者是a[i]=a[i-1]-y。


思路:

贪心的构造只要当前可以取,就想办法取它最大的,可以取的情况介绍a[i]<=B

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+1000;
long long  a[maxn];
int main()
{
    int n,i,j,t,B,x,y;
    cin>>t;
    while(t--)
    {
        cin>>n>>B>>x>>y;
        for(i=0;i<n+1;i++)
        {
            if(i==0) a[i]=0;
            else
            {
                if(a[i-1]+x<=B&&a[i-1]-y<=B)
                {
                    a[i]=max(a[i-1]+x,a[i-1]-y);
                }
                else
                {
                    if(a[i-1]+x>B)
                    {
                        a[i]=a[i-1]-y;
                    }
                    else
                    {
                        a[i]=a[i-1]+x;
                    }
                }
            }
        }
        long long ans=0;
        for(i=0;i<n+1;i++)
        {
            ans+=a[i];
//            cout<<a[i]<<" ";
        }
        cout<<ans<<endl;
    }
    return 0;
}


C. Bracket Sequence Deletion


题意:

给你一个只包含'(', ')'两种字符的字符串,每次操作选择它的最短前缀,如果最短前缀串是回文串或者是可以完成括号匹配的串,就可以进行抵消。


思路:

分析可得,要么最短前缀是(),或者((,)),剩下一种情况就是)开头的,不难发现如果是)开头的,只有当出现第二个),才能完成回文串抵消的操作,而且一定可以将中间全部抵消,所以直接模拟即可。

#include<bits/stdc++.h>
using namespace std;
bool check(string s2)
{
    for(int i=0;i<s2.length()/2;i++)
    {
        if(s2[i]!=s2[s2.length()-i-1]) {
            return false;
        }
    }
    return true;
}
int main()
{
    int n,i,j,t;
    string s1,s2;
    cin>>t;
    while(t--)
    {
        int f1=0,ans=0;
        cin>>n>>s1;
        i=0;s2="";
        while(i<n)
        {
            s2+=s1[i];
            if(s2[0]==')')
            {
                if(s1[i]==')') f1++;
                if(f1==2)
                {
                    ans++;
                    s2="";
                    f1=0;
                }
            }
            else
            {
                if(s2.length()==2)
                {
                    ans++;
                    s2="";
                    f1=0;
                }
            }
            i++;
        }
        cout<<ans<<" "<<s2.length()<<endl;
    }
    return 0;
}


相关文章
Codeforces Round #192 (Div. 2) (330B) B.Road Construction
要将N个城市全部相连,刚开始以为是最小生成树的问题,其实就是一道简单的题目。 要求两个城市之间不超过两条道路,那么所有的城市应该是连在一个点上的,至于这个点就很好找了,只要找到一个没有和其他点有道路限制的即可。
53 0
|
机器学习/深度学习 人工智能
Educational Codeforces Round 113 (Rated for Div. 2)C. Jury Meeting
Educational Codeforces Round 113 (Rated for Div. 2)C. Jury Meeting
64 0
|
人工智能 测试技术
Codeforces Round #746 (Div. 2) C. Bakry and Partitioning
Codeforces Round #746 (Div. 2) C. Bakry and Partitioning
94 0
Educational Codeforces Round 113 (Rated for Div. 2)A. Balanced Substring
Educational Codeforces Round 113 (Rated for Div. 2)A. Balanced Substring
98 0
|
人工智能 Windows
Educational Codeforces Round 113 (Rated for Div. 2) C - Jury Meeting (思维 组合数)
Educational Codeforces Round 113 (Rated for Div. 2) C - Jury Meeting (思维 组合数)
111 0
|
人工智能
Educational Codeforces Round 113 (Rated for Div. 2) B. Chess Tournament(思维 构造)
Educational Codeforces Round 113 (Rated for Div. 2) B. Chess Tournament(思维 构造)
95 0
|
机器学习/深度学习 人工智能 BI
Educational Codeforces Round 115 (Rated for Div. 2) D. Training Session(组合数学 思维)
Educational Codeforces Round 115 (Rated for Div. 2) D. Training Session(组合数学 思维)
121 0
|
机器学习/深度学习 Java
codeforces Educational Codeforces Round 49 (Rated for Div. 2) C题
刚开始拿到这题很懵逼,知道了别人的思路之后开始写,但是还是遇到很多坑,要求求P2/S最大。p=a b。就是求(a2+ b2 +2ab)/ab最大,也就是a/b +b/a最大。那么题意就很明显了。
125 0