首页 > 其他 > 详细

codeforces edu100

时间:2020-12-26 10:22:12      阅读:28      评论:0      收藏:0      [点我收藏+]

A. Dungeon

思路

显然只可以在标号为7的倍数的操作时使得\(a\),\(b\),\(c\)都变为0
每7次造成的伤害数是9,由于伤害打满了,所以 \(9|(a+b+c)\)
同时又因为需要每七次操作至少会让每个数减1,所以 \(min(a,b,c)>=(a+b+c)/9\)

代码

//I love Nanami Chiaki
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define mp make_pair
#define fst first
#define snd second
const int inf=1e9+7;
const int mod=1e9+7;
//const int maxn=;
int main(){
	int T_T;scanf("%d",&T_T);
	while (T_T--){
		int a,b,c;scanf("%d%d%d",&a,&b,&c);
		int mn=min(min(a,b),c);
		if ((a+b+c)%9==0 && (a+b+c)/9<=mn) puts("YES");
		else puts("NO");
	} 
	return 0;
}

B. Find The Array

思路

看到题目满脸懵逼
但有个式子可以先推推看

\[2*\sum_{i=1}^{n}{\left|a_i-b_i\right|} \leq S \]

不妨单独考虑\(a_i\),则

\[2*\left| a_i-b_i \right| \leq a_i \\Longrightarrow \frac{1}{2}a_i \leq b_i \leq \frac{3}{2}a_i \]

注意到如果满足上面这个式子,那么原式一定满足
又因为要满足 \(b_i|b_{i+1}\)\(b_{i+1}|b_i\)
考虑所有\(b_i\)都可以表示为\(2^k\),发现必存在

\[\frac{1}{2}a_i \leq 2^k \leq a_i \]

所以当\(b_i\)取小于等于\(a_i\)最大的2的整数幂,即满足题意

代码

//I love Nanami Chiaki
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define mp make_pair
#define fst first
#define snd second
const int inf=1e9+7;
const int mod=1e9+7;
const int maxn=57;
int a[maxn];
int main(){
	int T_T;scanf("%d",&T_T);
	while (T_T--){
		int n;scanf("%d",&n);
		for (int i=0;i<n;i++) scanf("%d",a+i);
		for (int i=0;i<n;i++){
			for (int k=0;k<32;k++){
				if (((a[i]-1)/2+1)<=(1<<k)){
					printf("%d%c",(1<<k),(i==n-1)?‘\n‘:‘ ‘);
					break;
				}				
			}
		}
	}
	return 0;
}

codeforces edu100

原文:https://www.cnblogs.com/xxjAc/p/14191193.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!