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');
    }
}