【CodeForces訓練記錄】CodeTON Round 9 (Div. 1 + Div. 2, Rated, Prizes!)

MNNUACM_2024ZY發表於2024-11-24

訓練情況

賽後反思

發現自己越來越能猜結論了,連續兩題結論猜對了,一把rating上青了。

A題

構造一個陣列使得模數互不相同,考慮構造一個模數為 \([0,1,2,3,4,5]\) 的數列,所以一個全是奇數的數列 \([1,3,5,7,9]\) 符合條件,直接輸出 \(1 \sim n\) 的奇數即可。

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    int n; cin>>n;
    vector<int> cnt(103,0);
    int j = 1;
    for(int i = 0;i<n;i++){
        for(;j<=100;j++){
            if(j%(i+1)==i&&!cnt[j]){
                cnt[j]++;
                cout<<j<<" ";
                break;
            }
        }
    }
    cout<<endl;
}

signed main(){
    int T; cin>>T; while(T--)
    solve();
    return 0;
}

B題

定義函式 \(f(s)\) 為字串 \(s\) 的非空子串,非空子串的個數要為偶數,考慮較小的情況,連續的兩個相同 \(f(s)\) 為偶數,例如 \(f(aa) = a + aa = 2\),或者連續三個互不相同,例如 \(f(abc) = a + b + c + ab + bc + abc = 6\),所以我們只要判斷字串中是否有連續兩個相同,或者連續三個互不相同即可。

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    string s; cin>>s;
    int n = s.size();
    for(int i = 0;i<n-2;i++){
        string t = s.substr(i,3);
        bool flag = true;
        for(int j = 0;j<3;j++){
            for(int k = j+1;k<3;k++){
                if(t[j] == t[k]) flag = false;
            }
        }
        if(flag){
            cout<<t<<endl;
            return;
        }
    }
    for(int i = 0;i<n-1;i++){
        string t = s.substr(i,2);
        bool flag = t[0]==t[1];
        if(flag){
            cout<<t<<endl;
            return;
        }
    }
    cout<<-1<<endl;
}

signed main(){
    int T; cin>>T; while(T--)
    solve();
    return 0;
}

C題

使得 xor(異或) 後能被 \(x,y\) 整除,首先 \(a \mod b\) 時,如果 \(b>a\) 那麼模數一定不為零,所以如果 xor 後把 \(x\) 最高位的更高位變成 \(1\),那麼之後的模數一定不為零,所以這題列舉的上界就為 \(min(2x,m)\)

#include <bits/stdc++.h>
#define int long long
#define endl '\n'

using namespace std;

void solve(){
    int x,m; cin>>x>>m;
    int ans = 0;
    for(int i = 1;i<=min(m,x*2);i++){
        if(x == i) continue;
        if(x%(x^i) == 0 || i%(x^i) == 0){
            ans++;
            // cout<<i<<endl;
        }
    }
    cout<<ans<<endl;
    // cout<<endl;
}

signed main(){
    int T; cin>>T; while(T--)
    solve();
    return 0;
}

相關文章