内容纲要
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');
}
}
叨叨几句... NOTHING