2025年11月02日训练赛

B4080 [语言月赛 202412] 聪明猪猪大赛

签到

P10114 [LMXOI Round 1] Size

诈骗qaq,值域个数是sqrt(n)级别的,暴力

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define yes cout << "Yes" << endl
#define no cout << "No" << endl
#define pii pair<int,int>
#define ll long long
#define pb push_back
#define ft first
#define se second
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define int long long

const int maxn = 5e7 + 10;

int cnt[maxn];

void solve(){
    int n;
    cin >> n;
    vector<int> vec;
    for(int i = 1; i <= n; i ++){
        int x; cin >> x;
        cnt[x] ++;
        vec.pb(x);
    }
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());
    int m = vec.size();

    ll ans = 0;
    for(int i = 0; i < m; i ++){
        for(int j = 0; j < m; j ++){
            ans += 1ll * cnt[vec[i]] * cnt[vec[j]] * (__builtin_popcount(vec[i] + vec[j]));
            ans += 1ll * cnt[vec[i]] * cnt[vec[j]] * (__builtin_popcount(max(vec[i], vec[j]) - min(vec[i], vec[j])));
        }
    }
    cout << ans << endl;
}
signed main(){
    std::ios::sync_with_stdio(false);
    int T=1;//cin>>T;
    while(T--){
        solve();
    }
}

P11874 [威海市赛2024] 不是一道简单的构造题

签到,直接yes

P9816 少项式复合幂

套f多少层,而且p 1e5 可以做
倍增,O(qlogy)

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define yes cout << "Yes" << endl
#define no cout << "No" << endl
#define pii pair<int,int>
#define ll long long
#define pb push_back
#define ft first
#define se second
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f

#define int long long
int m, q, p;
int a[30], b[30];
int qp(int a, int b){
    int res = 1;
    while(b){ 
        if(b&1) res = res * a % p; a = a * a % p; b >>= 1;
    }return res;
}
int cal(int x){
    int px = x;
    int res = 0;
    for(int i = 1; i <= m; i ++){
        res = (res + a[i] * qp(x, b[i]) % p) % p;
    }
    return res;
}

int to[100010][40];

void solve(){

     cin >> m >> q >> p;

    for(int i = 1; i <= m; i ++){
    cin >> a[i] >> b[i];
    }

    for(int i = 0; i < p; i ++){
        to[i][0] = cal(i);
    } 
    for(int j = 1; j <= 30; j ++){
    for(int i = 0; i < p; i ++){
            to[i][j] = to[to[i][j - 1]][j - 1];
        }
    }

    while(q --){
        int x, y; cin >> x >> y;
         x %= p;
        int res = x;
        for(int i = 0; i <= 30; i ++){
            if(y & (1<<i)) res = to[res][i] %p;
        }
        cout  << res << '\n';
    }

}
signed main(){
    std::ios::sync_with_stdio(false);
    int T = 1; //cin >> T;
    while(T--){
        solve();
    }
}
posted @ 2025-11-05 21:54  arin876  阅读(6)  评论(0)    收藏  举报