A - T-shirt
#include<bits/stdc++.h> using namespace std; int main(){ int a,b,c,x; cin>>a>>b>>c>>x; if(x <= a){ printf("%.8lf", 1.0); return 0; } if(x <= b){ printf("%.12lf", c * 1.0 / (b - a) * 1.0); return 0; } printf("%.8lf", 0.0); }
B - Minimize Ordering
#include<bits/stdc++.h> using namespace std; map<char, int> mp; int main(){ string s; cin>>s; for(int i = 0; i < s.length(); i++){ mp[s[i]]++; } for(int i = 'a'; i <= 'z'; i++){ while(mp[i] != 0){ printf("%c", i); mp[i]--; } } }
C - 1111gal password
简单DP
#include<bits/stdc++.h> #define ll long long using namespace std; const int N = 1e6 + 10, mod = 998244353; ll f[N][11]; int main(){ int n; cin>>n; for(int i = 1; i <= 9; i++){ f[1][i] = 1; } for(int i = 2; i <= n; i++){ f[i][1] = (f[i - 1][1] + f[i - 1][2]) % mod; for(int j = 2; j <= 8; j++){ f[i][j] = (f[i - 1][j - 1] + f[i - 1][j + 1] + f[i - 1][j]) % mod; } f[i][9] = (f[i - 1][8] + f[i - 1][9]) % mod; } ll ans = 0; for(int i = 1; i <= 9; i++){ ans = (ans + f[n][i]) % mod; } printf("%lld", ans); }
D - ABC Transform
递归查找
观察第一列:
A
BC
CAAB
ABBCBCCA
...
可以发现第一列存在如下规律: ABCABCABCABC...
而第T行的第K个数字如果K是奇数,那么它来源于上一行的第(K + 1) / 2个数,否则来源于K / 2个数。
可以想象到在进行多次溯源之后K会变为0,然后通过第一列的规律可以直接推出该位置的字母,再递归回传即可
#include<bits/stdc++.h> #define LL long long using namespace std; string s; int sol(LL t, LL k){ if(!t) return s[k] - 'A'; if(!k) return (s[0] - 'A' + t) % 3; return (sol(t - 1, k / 2) + k % 2 + 1) % 3; } int main(){ cin>>s; int q;cin>>q; while(q -- ){ LL t,k; scanf("%lld%lld", &t, &k); printf("%c\n", sol(t, k - 1) + 'A'); } }