Codeforces Round #575 (Div. 3)

Posted wgqqq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #575 (Div. 3)相关的知识,希望对你有一定的参考价值。

本蒟蒻已经掉到灰名了(菜到落泪),希望这次打完能重回绿名吧......

这次赛中A了三题

下面是本蒟蒻的题解

A.Three Piles of Candies

这题没啥好说的,相加除2就完事了

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    ll q;
    scanf("%lld",&q);
    while(q--)
    {
        ll a,b,c;
        scanf("%lld %lld %lld",&a,&b,&c);
        printf("%lld\n",(a+b+c)/2);
    }
    return 0;
 } 

B.Odd Sum Segments

题意大概就是把长度为n的数组分成k段,每段的总和为奇数,若可以则输出YES和和每段的右边界,否则输出NO。

偶数对结果没有影响,所以只用考虑奇数。记录奇数的个数,只要每段中含有奇数个奇数就行。

那么往前面的k-1段中各放一个奇数,再把剩下的奇数放在最后一段,判断最后一段中的奇数个数是否为奇数,判断后打印前面的奇数位置和n即可。(讲的不太清楚...)

代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=1e6+5;
ll a[maxn];
int main() {
    ll q;
    scanf("%lld",&q);
    while(q--) {
        ll n,k;
        scanf("%lld %lld",&n,&k);
        ll cnt=0;
        for(ll i=1; i<=n; i++) {
            scanf("%lld",&a[i]);
            if(a[i]%2==1)
                cnt++;
        }
        if(cnt>=k&&(cnt-(k-1))%2==1/*判断最后一堆中的奇数个数是否为偶数*/) {
            printf("YES\n");
            ll cnt2=0;
            for(ll i=1; i<=n; i++) {
                if(cnt2>=k-1)break;
                if(a[i]%2==1) {
                    printf("%lld ",i);
                    cnt2++;
                }
                }
                printf("%lld\n",n);
        } else
            printf("NO\n");



    }
    return 0;
}

C.Robot Breakout

大概就是纯模拟吧,对于每个机器人,记录它能到达的x,y的上下界,然后取个交集,输出交集的左边界。

代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=1e5+5;
const ll INF=1e5;
ll a[maxn][4];//储存可达状态 ,a[i][0]为x的下界,a[i][1]为x的上界,a[i][2]为y的下界,a[i][3]为y的上界 
int main()
{
    ll q;
    scanf("%lld",&q);
    while(q--)
    {
        ll n,x,y,f1,f2,f3,f4;
        scanf("%lld",&n);
        for(ll i=1;i<=n;i++)
        {
            scanf("%lld%lld%lld%lld%lld%lld",&x,&y,&f1,&f2,&f3,&f4);
            a[i][0]=a[i][1]=x;//上下界都标记为x 
            a[i][2]=a[i][3]=y;//同理 
            if(f1)a[i][0]=-INF;
            if(f2)a[i][3]=INF;
            if(f3)a[i][1]=INF;
            if(f4)a[i][2]=-INF;
        }
        /*for(int i=1;i<=n;i++)
        {
            cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<" "<<a[i][3]<<endl;
        }*/
        ll xmax=INF,xmin=-INF,ymax=INF,ymin=-INF;
        bool flag =true;
        for(ll i=1;i<=n;i++)
        {
            if(a[i][0]>xmax||a[i][1]<xmin||a[i][2]>ymax||a[i][3]<ymin)
            {
                printf("0\n");
                flag=false;
                break;
            }
            if(xmax>a[i][1])xmax=a[i][1];
            if(xmin<a[i][0])xmin=a[i][0];
            if(ymax>a[i][3])ymax=a[i][3];
            if(ymin<a[i][2])ymin=a[i][2];
        }
        if(flag)
        {
            printf("1 %lld %lld\n",xmin,ymin);
        }
        
        
    }
    return 0;
 } 

后面的题目赛中没做出来(果然还是我太菜了555)

下午补了题晚上再把个人的题解放上来

 

以上是关于Codeforces Round #575 (Div. 3)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #575 (Div. 3)

Codeforces Round #575 (Div. 3) C. Robot Breakout (模拟,实现)

Codeforces Round #575 (Div. 3) D1. RGB Substring (easy version)

Codeforces Round #575 (Div. 3) RGB Substring (hard version) ( FFT)

Codeforces Round #575 (Div. 3) B. Odd Sum Segments (构造,数学)

Codeforces Round #575 (Div. 3) (A. Three Piles of Candies)(数学)