Codeforces round 635赛后解题报告
A. Ichihime and Triangle
首先这是一道几何题
那么我们知道,在此题中, x , y , z x,y,z x,y,z 满足 x ≤ y ≤ z , x + y > z x\leq y\leq z,x+y>z x≤y≤z,x+y>z。这是三角形三边的关系,很好理解。那么我们对这样一道构造题,又是在第一题,一定没什么难度。我们想是否能用 a , b , c , d a,b,c,d a,b,c,d 找出一组万能解。
我们再来看等腰三角形的性质,如果我们知道了两条腰的长:
此时满足 a + x > x , x + x > a a+x>x,x+x>a a+x>x,x+x>a,所以 a < 2 x a<2x a<2x 即可。因此我们发现 a , c , c a,c,c a,c,c 是一组万能的解,满足所有条件。所以,直接输出即可,时间复杂度为 O ( 1 ) O(1) O(1)。
但为什么我在比赛里做了15min,错了三次qwq
#include<bits/stdc++.h>
#define int long long
using namespace std;
int read() {
char ch=getchar();
int f=1,x=0;
while(ch<'0'||ch>'9') {
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=x*10+ch-'0';
ch=getchar();
}
return f*x;
}
int a,b,c,d,n;
signed main() {
n=read();
for(int i=1;i<=n;i++) {
a=read();b=read();c=read();d=read();
printf("%lld %lld %lld\n",a,c,c);
}
return 0;
}
B. Kana and Dragon Quest game
那个switch好珂爱
首先,我们要考虑贪心,但有一个问题:因为一技能 ⌊ h 2 ⌋ + 10 \lfloor \frac{h}{2}\rfloor+10 ⌊2h⌋+10 有可能会使得龙的血量变大,那么什么时候采用第一种会使龙的血量增加呢?
Q:不就是不等式吗,小学三年级都会做,说的那么玄乎
A:你说的没错
我们来列个不等式看看:
⌊ h 2 ⌋ + 10 ≥ h \lfloor \frac{h}{2}\rfloor+10\geq h ⌊2h⌋+10≥h
⌈ h 2 ⌉ ≤ 10 \lceil \frac{h}{2}\rceil\leq 10 ⌈2h⌉≤10
h ≤ 20 h\leq 20 h≤20
所以我们就知道,如果 h ≤ 20 h\leq 20 h≤20,就只能用第二种技能,否则龙的血量会增加。一个贪心地思路就出现了:
1.我们先尽量使用一技能,直到 h ≤ 20 h\leq 20 h≤20 或一技能 n n n 次用完了,在等时间为 ∞ ∞ ∞ 的CD。
2.我们一直用二技能,直到 h ≤ 0 h\leq 0 h≤0 或二技能 m m m 次用完了,在等时间同样为 ∞ ∞ ∞ 的CD。
3.如果 h ≤ 0 h\leq 0 h≤0,输出 YES,否则 NO。(由于题目说 YES,NO 大小写随意,所以代码会有点不正常(滑稽))
总结这道题,是一个不等式的小应用,同时用贪心辅助即可,作为CF的div2 B还是很合适的~
还有注意:
多组数据!!!
#include<bits/stdc++.h>
#define int long long
using namespace std;
int read() {
char ch=getchar();
int f=1,x=0;
while(ch<'0'||ch>'9') {
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=x*10+ch-'0';