2025 ICPC Gran Premio de Mexico 3ra Fecha

2025 ICPC Gran Premio de Mexico 3ra Fecha

A题

签到

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6+5;
ll n;
ll a[N];
int main() {
    ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>n;
    ll sum = 0;
    for(int i=0;i<n;i++) {
        cin>>a[i];
        sum+=a[i];
    }
    ll t = n;
    while (t >= 1) {
        if (sum % t == 0) {
            cout<<n - t <<'\n';
            return 0;
        }
        t--;
    }
    return 0;
}

二、K题

分类讨论

cpp 复制代码
#include<bits/stdc++.h>
#define int long long
using namespace std;

void solve() {
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    if (d <= a) {
        cout<<"0\n";
        return;
    }
    if (d > a && d <= b) {
        int ans = d - max(a,c);
        cout<<ans<<"\n";
        return;
    }
    if (d > b) {
        if (c <= a) {cout<<b - a <<'\n'; return;}
        if (c > a && c <= b){cout << b - c <<'\n'; return;}
        if (c > b){cout << "0\n";return;}
    }
}
signed main() {
    ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int T;
    cin>>T;
    while(T--) {
        solve();
    }
    return 0;
}

三、B题

贡献法

结论就是i * (n - i + 1) * a[i]是每个值的贡献。

cpp 复制代码
#include<bits/stdc++.h>
const int N = 1e5;
#define int long long
using namespace std;
int a[N];
void solve() {
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) {
        cin>>a[i];
    }
    int ans = 0;
    for(int i=1;i<=n;i++) {
        ans += i * (n - i + 1) * a[i];
    }
    cout<<ans<<'\n';
}
signed main() {
    ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int T = 1;
    // cin>>T;
    while(T--) {
        solve();
    }
    return 0;
}

四、J题

线段树 + 尼姆博弈

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

const int MAX_N = 1e6 + 5;
long long a[MAX_N];
long long sum_xor[MAX_N << 2];
//建树
void build(int l, int r, int rt) {
    if (l == r) {
        sum_xor[rt] = a[l];
        return;
    }
    int mid = (l + r) >> 1;
    build(l, mid, rt << 1);
    build(mid + 1, r, rt << 1 | 1);
    sum_xor[rt] = sum_xor[rt << 1] ^ sum_xor[rt << 1 | 1];//up函数
}

void update(int k, long long x, int l, int r, int rt) {
    if (l == r) {//注意:这里是叶子节点异或值等于本身,加上后仍然是其异或值
        sum_xor[rt] += x;
        return;
    }
    int mid = (l + r) >> 1;
    if (k <= mid) {
        update(k, x, l, mid, rt << 1);
    } else {
        update(k, x, mid + 1, r, rt << 1 | 1);
    }
    sum_xor[rt] = sum_xor[rt << 1] ^ sum_xor[rt << 1 | 1];//up函数
}
//范围查询
long long query(int L, int R, int l, int r, int rt) {
    if (L <= l && r <= R) {
        return sum_xor[rt];
    }
    int mid = (l + r) >> 1;
    long long res = 0;
    if (L <= mid) {
        res ^= query(L, R, l, mid, rt << 1);
    }
    if (R > mid) {
        res ^= query(L, R, mid + 1, r, rt << 1 | 1);
    }
    return res;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n, q;
    scanf("%d%d", &n, &q);

    for (int i = 1; i <= n; ++i) {
        scanf("%lld", &a[i]);
    }

    build(1, n, 1);

    char op[2];
    while (q--) {
        scanf("%s", op);
        if (op[0] == 'P') {
            int l, r;
            scanf("%d%d", &l, &r);
            long long xor_sum = query(l, r, 1, n, 1);
            if (xor_sum == 0) {
                printf("JUAN\n");
            } else {
                printf("FRANK\n");
            }
        } else if (op[0] == 'R') {
            int k;
            long long x;
            scanf("%d%lld", &k, &x);
            update(k, x, 1, n, 1);
        }
    }

    return 0;
}

五、G题

经典精度问题,一定要想到要将除法转换为乘法,转换后因为数值较大,可以转为log,乘变加。

cpp 复制代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef long double ld;
void solve() {
    int h1, h2, b;
    cin >> h1 >> h2 >> b;
    ld t = logl(ld (h1) / h2);
    ld r = logl(ld (b)) - logl(ld (b-1));
    ld ans = t / r;
    int res = int32_t(ceil(ans));
    cout << res << '\n';
}

signed main() {
    ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
    int T;
    cin >> T;
    while (T--) {
        solve();
    }
    return 0;
}
相关推荐
你撅嘴真丑4 小时前
第九章-数字三角形
算法
在路上看风景4 小时前
19. 成员初始化列表和初始化对象
c++
uesowys5 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
zmzb01035 小时前
C++课后习题训练记录Day98
开发语言·c++
ValhallaCoder5 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮5 小时前
AI 视觉连载1:像素
算法
念风零壹5 小时前
C++ 内存避坑指南:如何用移动语义和智能指针解决“深拷贝”与“内存泄漏”
c++
智驱力人工智能5 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥6 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风6 小时前
代码随想录第十五天
数据结构·算法·leetcode