Codeforces Round #767 (Div. 2)(A,B,C,D,E)

Codeforces Round #767 (Div. 2)(A,B,C,D,E),第1张

Codeforces Round #767 (Div. 2)(A,B,C,D,E)

题目链接.

题目

A - Download More RAMB - GCD ArraysC - Meximum ArrayD - Peculiar Movie PreferencesE Grid Xor

A - Download More RAM
#include
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int t;
ll n,k;
struct node
{
    ll a,b;
}v[110];
bool cmp(node x,node y)
{
    return x.a>t;
    while(t--)
    {
        cin>>n>>k;
        for(int i=1;i<=n;i++)
        {
            cin>>v[i].a;
        }
        for(int i=1;i<=n;i++)
        {
            cin>>v[i].b;
        }
        sort(v+1,v+1+n,cmp);
        for(int i=1;i<=n;i++)
        {
            if(k>=v[i].a)
            {
                k+=v[i].b;
            }
            else break;
        }
        cout< 
B - GCD Arrays 

虽然是B,但还是想了一会,没有看完题就思路明确,所以代码写的很丑。
思路:
a a a只有一个数的话,该数是 1 1 1就为 N O NO NO,不是就为 Y E S YES YES。
a a a有多个数的话, k k k大于等于 a a a中奇数的个数就为 Y E S YES YES,否则为 N O NO NO。

#include
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
 
int t;
int l,r,k;
 
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>t;
    while(t--)
    {
        cin>>l>>r>>k;
        if(l==r&&l==1)
        {
            cout<<"NOn";
            continue;
        }
        if(r-l==k)
        {
            cout<<"YESn";
            continue;
        }
        if(r-l+1<=k*2)
        {
            cout<<"YESn";
            continue;
        }
        if((r-l+1)%2==1&&l%2==0&&k==(r-l+1)/2)
        {
            cout<<"YESn";
            continue;
        }
        cout<<"NOn";
 
    }
    return 0;
}
C - Meximum Array

是C没有什么思路的罚坐场了,fw落泪…
思路: 预先记录 0 − n 0-n 0−n每个数出现的位置,然后从初始位置s=0开始找mex,找完一个mex就更新初始位置s。

#include
using namespace std;
 
int t;
int n;
vectora[200010],b;
 
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
 
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=0;i<=n;i++)a[i].clear();
        b.clear();
        for(int i=0;i>x;
            a[x].push_back(i);
        }
        int i=0;
        while(i 
D - Peculiar Movie Preferences 

思路:
一个字符串自身是回文就为 Y E S YES YES;
排除上述情况后字符串包括两种种类型ABC(ABB,AAB是特殊的ABC),AB;
组成回文的情况可能是(1)AB-BA(2)ABC-CBA (3)AB -CBA (4)ABC-BA
a-zzz可变为int:000001-262626;
可用set记录一下。

#include
using namespace std;
 
int t;
int n;
sets1,s2,s3,s4;
 
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
 
    cin>>t;
    while(t--)
    {
 
        s1.clear();s2.clear();
        s3.clear();s4.clear();
        cin>>n;
        int flag=0;
        for(int i=0;i>s;
            if(!flag)
            {
                if(s.size()==1)
                {
                    flag=1;
                    continue;
                }
                if(s.size()==2)
                {
                    if(s[0]==s[1])
                    {
                        flag=1;
                        continue;
                    }
                    int x=(s[0]-'a'+1)*100+s[1]-'a'+1;
                    int y=(s[1]-'a'+1)*100+s[0]-'a'+1;
                    if(s2.count(x))
                    {
                        flag=1;
                    }
                    if(s1.count(y))
                    {
                        flag=1;
                    }
                    if(s3.count(y))
                    {
                        flag=1;
                    }
                    if(!flag)
                    {
                        s1.insert(x);
                        s2.insert(y);
                    }
                }
                if(s.size()==3)
                {
                    if(s[0]==s[2])
                    {
                        flag=1;
                        continue;
                    }
                    int x=(s[0]-'a'+1)*10000+(s[1]-'a'+1)*100+(s[2]-'a'+1);
                    int y=(s[2]-'a'+1)*10000+(s[1]-'a'+1)*100+(s[0]-'a'+1);
                    int x2=(s[0]-'a'+1)*100+(s[1]-'a'+1);
                    int y2=(s[2]-'a'+1)*100+(s[1]-'a'+1);
                    if(s2.count(x))
                    {
                        flag=1;
                    }
                    if(s1.count(y))
                    {
                        flag=1;
                    }
                    if(s1.count(y2))
                    {
                        flag=1;
                    }
                    if(!flag)
                    {
                        s1.insert(x);
                        s2.insert(y);
                        s3.insert(x2);
                        s4.insert(y2);
                    }
                }
            }
 
        }
        if(flag)cout<<"YESn";
        else cout<<"NOn";
    }
 
    return 0;
}
E Grid Xor

找规律

一个正方形可以分为这样的四部分去填充,找填充规律

#include
#define ll long long
using namespace std;

int t;
int n;
int a[1010][1010];

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);

    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                cin>>a[i][j];
            }
        }
        int ans=0;
        for(int i=1;i<=n;i+=2)
        {
            for(int j=i+1;j<=n;j+=4)
            {
                ans=ans^a[i][j]^a[n+1-i][j];
            }
        }
        for(int i=1;i<=n;i+=2)
        {
            for(int j=i+3;j<=n;j+=4)
            {
                ans=ans^a[j][i]^a[n+1-j][i];
            }
        }
        cout<

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5710836.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存