题解:P13678 [GCPC 2023] Mischievous Math
题解:P13678 [GCPC 2023] Mischievous Math
挺有意思的题。
我们的策略如下:
- 对于一个较大的数,使构造出来的数尽可能小;
- 对于一个较小的数,使构造出的数字尽可能大即可。
所以,当 \(d \ge10\) 是,显然数字 \(a=1,b=2,c=3\) 符合条件。因为无论怎么使用这三个数和运算符,最大的数只能是 \(9\)。
对应的,当 \(0 < d < 10\) 时,那么 \(1-100\) 中三个最大的自然数 \(a=100,b=99,c=98\) 显然符合条件。
但是注意 \(1\) 和 \(2\) 要特判,因为 \(a-b=100-99=1\),\(a-c=100-98=2\)。这两组显然不符合条件。
这时我们可以分别找到 \(a=100,b=98,c=96\) 和 \(a=100,b=99,c=96\)。
代码实现
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll d;
int main(){
cin>>d;
if(d>=10) cout<<1<<" "<<2<<" "<<3<<" ";
else{
if(d==1) cout<<100<<" "<<98<<" "<<96<<" ";
else if(d==2) cout<<100<<" "<<99<<" "<<96<<" ";
else cout<<100<<" "<<99<<" "<<98<<" ";
}
return 0;
}