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;
}
相关推荐
ShineWinsu11 小时前
对于C++:类和对象的解析—下(第二部分)
c++·面试·笔试·对象··工作·stati
20130924162712 小时前
1968年 Hart, Nilsson, Raphael 《最小成本路径启发式确定的形式基础》A* 算法深度研究报告
人工智能·算法
如何原谅奋力过但无声12 小时前
【力扣-Python-滑动窗口经典题】567.字符串的排列 | 424.替换后的最长重复字符 | 76.最小覆盖子串
算法·leetcode
BHXDML13 小时前
第七章:类与对象(c++)
开发语言·c++
玄冥剑尊13 小时前
贪心算法进阶
算法·贪心算法
玄冥剑尊13 小时前
贪心算法深化 I
算法·贪心算法
52Hz11813 小时前
力扣73.矩阵置零、54.螺旋矩阵、48.旋转图像
python·算法·leetcode·矩阵
BHXDML13 小时前
第一章:线性回归& 逻辑回归
算法·逻辑回归·线性回归
yyf1989052513 小时前
C++ 跨平台开发的挑战与应对策略
c++
iAkuya14 小时前
(leetcode)力扣100 二叉搜索树种第K小的元素(中序遍历||记录子树的节点数)
算法·leetcode·职场和发展