G. 美好的一天早早结束
题意分析
给出一个加密后的字符串,要求将其按照题干中提取出的变换规则解密出原始字符串。
题解
现代密码学,两个在 的数字,可以考虑一下仿射密码。由于密钥空间很小,可以直接暴力算出符合要求的密钥对,然后不难发现有一对
满足
和日期有关
的需求,即可解出本题。
受限于密钥的要求,诸如 或者
这些都不行,只能退而求其次了。
代码
int G(int a, int b, int& x, int& y){
if(!b){
x = 1, y = 0;
return a;
}
int g = G(b, a % b, y, x);
y -= (a / b) * x;
return g;
}
int M(int a, int b){ // ExGCD求逆
int x, y;
G(a, b, x, y);
return (x + b) % b;
}
char decryptChar(char c, int a, int b, int k){
int D = islower(c) ? 'a' : 'A';
c -= D;
return ((M(a, k) * (c - b + k)) % k) + D;
}
int main(){
string s;
cin >> s;
for(auto c : s) cout << decryptChar(c, 21, 4, k);
return false;
}
H. 从摸鱼开始的奶茶店生活
题意分析
下一个在周日的情人节是几几年。
题解
今天星期五,后天星期日,小学数学题,直接得出今年+2=2027年
代码
2027
I. 程序设计入门
题意分析
给定 和一个数列
, 问能否进行不多于
次操作:交换两个数字;使两个数字同时变为一个比二者都小的数字,使数列
同时满足以下两个条件:
题解
由于 的数据范围,不难看出不管怎么操作都能满足条件2,让
满足不下降序列。
但是 的时候,无法找到两个
使满足条件1,故
的时候为No,其余时刻均为Yes。
代码
void solve(){
int n, k, x; cin >> n >> k;
for(int i = 0; i < n; ++i) cin >> x;
if(n == 1) cout << "NO" << endl; else cout << "YES" << endl;
return;
}