• Codeforces Round #575 (Div. 3) B. Odd Sum Segments 、C Robot Breakout


    传送门

    B题题意:

    给你n个数,让你把这n个数分成k个段(不能随意调动元素位置)。你需要保证这k个段里面所有元素加起来的和是一个奇数。问可不可以这样划分成功。如果可以打印YES,之后打印出来是从哪里开始断开的。

    否则打印出NO

    题解:

    加上奇数可以使和的性质改变,原来使偶数则变为奇数,奇数则变为偶数。加上一个偶数就不会有这样的变化。所以第一步就找出来有多少个奇数。因为要保证k个段的和都为奇数,所以每个段得先有一个奇数

    剩下来的奇数数量如果是偶数那就不影响,这样就可以成功划分。如果是奇数那就划分不成功

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<map>
     6 #include<math.h>
     7 using namespace std;
     8 typedef long long ll;
     9 const int maxn=2e5+5;
    10 const int mod=26;
    11 const int block=300;
    12 int v[maxn];
    13 int main()
    14 {
    15     int t;
    16     scanf("%d
    ",&t);
    17     while(t--)
    18     {
    19         int n,m,sum=0,a;
    20         scanf("%d%d",&n,&m);
    21         for(int i=1;i<=n;++i)
    22         {
    23             scanf("%d",&v[i]);
    24             if(v[i]%2)
    25                 sum++;
    26         }
    27         sum-=m;
    28         if(sum<0)
    29             printf("NO
    ");
    30         else if(sum==0 || sum%2==0)
    31         {
    32             //sum/=2;
    33             printf("YES
    ");
    34             int i;
    35             if(sum==0) i=0;
    36             else i=1;
    37             if(sum!=0)
    38             for(i;i<=n;++i)
    39             {
    40                 if(v[i]%2)
    41                 {
    42                     sum--;
    43                     if(sum==0)
    44                         break;
    45                 }
    46             }
    47             for(i+=1;i<=n;++i)
    48             {
    49                 if(m==1)
    50                 {
    51                     printf("%d
    ",n);
    52                     break;
    53                 }
    54                 if(v[i]%2)
    55                 {
    56                     printf("%d ",i),m-=1;
    57                 }
    58             }
    59         }
    60         else printf("NO
    ");
    61     }
    62     return 0;
    63 }
    View Code

    C题题意:

    给你n个机器人,这n个机器人有四个移动方向,但是有可能它的中枢坏了导致不能向某个方向移动。现在你需要找到一个坐标,机器人得到这个坐标会来到这里,但是也有某些方向损坏的机器人来不了

    所以你需要找出来有没有能让所有机器人都到达这里的一个坐标。能找出来的话就先打印一个“1”再打印出这个坐标,否则打印出0

    题解:

    找出来所有机器人可移动区间,再让它们取并集就可以了

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<map>
     6 #include<math.h>
     7 using namespace std;
     8 typedef long long ll;
     9 const int maxn=1e5;
    10 const int mod=26;
    11 const int block=300;
    12 struct shudui
    13 {
    14     int xmin,xmax,ymin,ymax,x,y;
    15 } m[maxn+5];
    16 int main()
    17 {
    18     int t;
    19     scanf("%d",&t);
    20     while(t--)
    21     {
    22         int xmin=-maxn,xmax=maxn,ymin=-maxn,ymax=maxn,flag=0;
    23         int n,x1,x2,x3,x4,x,y;
    24         scanf("%d",&n);
    25         for(int i=1; i<=n; ++i)
    26         {
    27             scanf("%d%d%d%d%d%d",&x,&y,&x1,&x2,&x3,&x4);
    28             m[i].x=x;
    29             m[i].y=y;
    30             if(!flag)
    31             {
    32                 if(x1)
    33                     m[i].xmin=-maxn;
    34                 else m[i].xmin=x;
    35                 if(x2)
    36                     m[i].ymax=maxn;
    37                 else m[i].ymax=y;
    38                 if(x3)
    39                     m[i].xmax=maxn;
    40                 else m[i].xmax=x;
    41                 if(x4)
    42                     m[i].ymin=-maxn;
    43                 else m[i].ymin=y;
    44                 if(xmin>m[i].xmax || xmax<m[i].xmin || ymin>m[i].ymax || ymax<m[i].ymin)
    45                 {
    46                     flag=1;
    47                 }
    48                 else
    49                 {
    50                     xmin=max(xmin,m[i].xmin);
    51                     xmax=min(xmax,m[i].xmax);
    52                     ymin=max(ymin,m[i].ymin);
    53                     ymax=min(ymax,m[i].ymax);
    54                 }
    55             }
    56         }
    57         if(!flag)
    58         {
    59             printf("1 %d %d
    ",xmin,ymin);
    60         }
    61         else printf("0
    ");
    62     }
    63     return 0;
    64 }
    View Code
  • 相关阅读:
    w3cschoolDjango中文教程
    Golang基本语法2
    w3cschool微信小程序开发文档服务端
    bianchenggo语言概要总结
    Golang语言简介1
    Spring中的@Transactional注解为什么要加rollbackFor = Exception.class之源码解析
    Java 编译期与运行期,别傻傻分不清楚!
    java为什么有些异常throw出去需要在函数头用throws声明,一些就不用?
    @Transactional(rollbackFor=Exception.class)的使用
    Lambda 表达式有何用处?如何使用?
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/11538434.html
Copyright © 2020-2023  润新知