Codeforces刷题记录(tag: chinese remainder theorem 873 ~ 1073)

单词记录:

1. training regime 训练制度 train 训练 grandmaster n.大师  divisible adj.可除尽的  a permutation 一个排列
rearrang 重排列 digit n.数字,数位  generat 产生 denoted 表示 valid solution 有效的解决方案
1.题目名称:A. Competitive Programmer 1266A
2.思路:

给定n个字符串,对于每一个字符串,经过重排列之后结果是不是60的倍数。
我们发现,是60的倍数,就必须是3和20的倍数。
不管怎么重排列,数字总和都是不变的。
判断一个数是不是3的倍数 等价于 每一位求和判断是不是3的倍数。
如果要是20的倍数,则排列之后的答案最后两位必须是00,20,40,60,80之中是任意一种。倒数第二位必须是偶数。
因此,现在要做的就是,对于每一个字符串:
1.求总和判断是不是3的倍数。
2.判断是否至少有一个0。
3.判断是否有第二个偶数(包括0)。

3.代码:
#include <bits/stdc++.h>

using namespace std;

int n;
int main()
{
	cin >> n;
	while(n --)
	{
		string a;
		cin >> a;
		bool ok1 = false, ok2 = false;//ok1判断是否至少有一个0 ok2是找一个偶数。 
		int cnt = 0;//判断总和是不是3的倍数 
		for(auto t : a)
		{
			int x = t - '0';
			if(x == 0 && !ok1) ok1 = true;
			else if(x % 2 == 0) ok2 = true;
			cnt += x;
		}
		if(ok1 && ok2 && cnt % 3 == 0) puts("red");
		else puts("cyan"); 
	}
	return 0;
 } 
4.总结:
  • 结论:一个数是 3 的倍数当且仅当这个数各位上的数字加起来是 3 的倍数。 结论:一个数是3的倍数当且仅当这个数各位上的数字加起来是3的倍数。 结论:一个数是3的倍数当且仅当这个数各位上的数字加起来是3的倍数。
  • 要想是一个数的倍数,可以分解,比如本题。
  • 0是一个偶数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值