Codeforces Round 891 (div3)A-B

A Array Coloring

题目大意就是数组中的元素任意染成两种颜色,让被这两种颜色染上的数字各自加起来的奇偶性相同,相同输出YES,不相同输出NO

思路

奇偶性关键是由数组中奇数的个数决定的,统计一下数组中奇数的个数,如果个数是奇数,那么肯定凑不成,反之能凑成

AC代码

#include <bits/stdc++.h>
​
using namespace std;
​
int t;
​
void solve()
{
  int n;
  cin >> n;
  int cnt = 0;
  while(n --)
  {
    int x;
    cin >> x;
    if(x % 2 != 0)cnt ++;
  }
  if(cnt % 2 == 0) cout << "YES" <<endl;
  else cout << "NO" << endl;
  
}
​
int main() 
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> t;
  while(t --)
  {
  solve();    
  }
  return 0;
}

B Maximum Rounding

题目大意是给一个数,可以对他的每一位进行四舍五入,大于5的就可以直接进一位,求这个数被舍入后的最大值,例如99 被舍入后最大值能到100

思路

因为题目给定的数据范围较大,每个数字的长度能达到2*10^5,所以要选择采用字符串输入,从后往前 统计每一位的数字,定义一个进位的变量,如果这一位大于5,那么从这一位开始的后面的数字都要变成0,所以还要定义一个标志位,标志一下看从哪一位开始需要变0,如果最后一位的进位(因为是从后往前,在这里最后一位就是这个字符串的第一位)是1,这种就是类似 99 的情况,所以前面应该拼接上一个1

AC代码

#include <iostream>
#include<vector>
#include<cstring>
​
using namespace std;
​
int t;
​
void solve()
{
  string a;
  cin >> a;
  int n = a.size();
  int tmp = 0; // 进位
  int k = n; //标志位
  for (int i = n - 1; i >= 0; i -- )
  {
    if(a[i] + tmp >= '5')
    {
      k = i;
      tmp = 1;
    }else 
    {
      a[i] += tmp;
      tmp = 0;
    }
  }
  for (int i = k; i < n; i ++)
  {
    a[i] = '0';
    
  }
  if(tmp) {
    a = '1' + a;
  }
  cout << a << endl;
}
​
int main() 
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  
  cin >> t;
  while(t --)
    {
      solve();
    }
  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值