码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #575 (Div. 3)

时间:2019-07-25 13:31:44      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:class   pil   上界   lag   bool   als   amp   个数   模拟   

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

这次赛中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)

标签:class   pil   上界   lag   bool   als   amp   个数   模拟   

原文地址:https://www.cnblogs.com/wgqqq/p/11243637.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!