首页 > 其他分享 >2024 ICPC National Invitational Collegiate Programming Contest, Wuhan Site

2024 ICPC National Invitational Collegiate Programming Contest, Wuhan Site

时间:2024-05-14 18:31:20浏览次数:29  
标签:Invitational 题意 idx Contest int mid 查询 Wuhan ans

2024 ICPC National Invitational Collegiate Programming Contest, Wuhan Site

I. Cyclic Apple Strings

题意:给定一个01字符串,每次操作可以将这个字符串向左循环移动任意次数,求让这个字符串变成有序的需要最少几次操作

思路:每次只能减少最右边的不和有边界相邻的一个1的长块,每次删去最右边的即可

void solve(){
    string s;
    cin >> s;
    int ans = 0, idx = s.size() - 1;
    while(idx >= 0 && s[idx] == '1') idx --;
    for(idx; idx >= 0; idx --){
        if(s[idx] == '1' && s[idx + 1] == '0') ans ++;
    }
    cout << ans << '\n';
}

 K. Party Games

题意:给定 n 个整数从左到右排成一列,每次可以从两端拿走其中一个数字,如果数字被拿完了或者剩余的数字的异或和为0,则当前操作无法进行,就失败了

思路:打表发现 n % 4 == 0 || n % 4 == 1 的情况下 Fluttershy 必胜,否则必败

void solve(){
    ll n;
    cin >> n;
    n %= 4;
    if(n == 1 || n == 0) cout << "Fluttershy\n";
    else cout << "Pinkie Pie\n"; 
}

B. Countless Me

题意:给定一个数组,每个数组的值可以随便分配,求最后的最小或运算的和

思路:从高位往低位贪心即可,如果在当前位的后面放满而且不够,那么放在当前位是最好的选择,注意这里的位数不要太大

void solve(){
    ll n, x, sum = 0;
    cin >> n;
    for(int i = 1; i <= n; i ++){
        cin >> x;
        sum += x;
    }
    ll ans = 0;
    for(int i = 30; i >= 0; i --){
        if(sum > ((1ll << i) - 1) * n){
            ll num = min(n, sum / (1ll << i));
            sum -= num * (1ll << i);
            ans += 1ll << i;
        }
    }
    cout << ans << '\n';
}

F. Custom-Made Clothes

题意:给定一个n * n 的矩阵,矩阵的每个点大于等于它左边的和上边的点(如果存在),每次可以查询一个点的数字是不是小于等于给定的询问值,在50000次查询中得出第k大的数字

思路:看50000次查询能猜到复杂度应该是2nlogn级别,二分答案,每次查询从左下角开始,如果小于等于mid,往上移动,否则把这一列上面的数字的个数全部加上,否则左移,每次查询的次数不超过2*n,总计2nlogn次查询得出答案

int n, k;
int ask(int x, int y, int z){
    cout << "? " << x << ' ' << y << ' ' << z << endl;
    int ans;
    cin >> ans;
    return ans;
}

bool check(int x){
    int sum = 0;
    int a = n, b = 1;
    while(a >= 1 && b <= n){
        int ans = ask(a, b, x);
        if(ans == 1){
            sum += a;
            b ++;
        }
        else{
            a --;
        }
    }
    if(sum >= k) return true;
    else return false;
}
void solve(){
    cin >> n >> k;
    k = n * n - k + 1;
    int l = 1, r = n * n;
    while(l < r){
        int mid = l + r >> 1;
        if(check(mid)) r = mid;
        else l = mid + 1;
    }
    cout << "! " << l << endl;
}

pending。。。。。。

标签:Invitational,题意,idx,Contest,int,mid,查询,Wuhan,ans
From: https://www.cnblogs.com/RosmontisL/p/18183336

相关文章

  • 2024 Jiangsu Collegiate Programming Contest
    Preface这场由于是学长们出的题,在5.5就作为验题队伍VP了一遍本来验题场一般是三人三机火速开题的,但由于那天徐神没带电脑,索性就三人一机当作训练来打最后经典被队友带飞,4h8题后和NJU的WF银牌队只差一题,然后最后1h我冲刺H题失败,耻辱下机吃花雕A.Two'sCompanybutThree'sTr......
  • AtCoder Beginner Contest 352 E - Clique Connect
    题目链接不需要将所有边都建立出来,根据\(Kruskal\)最小生成树的贪心策略,相同权值的边不需要形成团,形成一个链就行,对结果没有影响。时间复杂度\(O(mlogm)[m=\sum_{i=1}^{n}k_{i}]\)。#pragmaGCCoptimize(2)#pragmaGCCoptimize(3)#include<bits/stdc++.h>//#defineint......
  • AtCoder Beginner Contest 353
    AtCoderBeginnerContest353abc353_c题意:定义\(F(x,y)\)为\((x+y)mod10^8\)的值,求\(\displaystyle\sum_{i=1}^{N-1}\sum_{j=i+1}^Nf(A_i,A_j).\)思路:对于\(\displaystyle\sum_{i=1}^{N-1}\sum_{j=i+1}^N\f(A_i,A_j).\)来说,每个\(A_i\)的次数都是\(n-1\)次,所以如果没有\(m......
  • Atcoder Beginner Contest 353
    AtcoderBeginnerContest353A问题陈述有\(N\)幢楼房排列成一排。左起的\(i\)th楼高\(H_i\)。请判断是否有比左起第一座高的建筑物。如果存在这样的建筑物,请找出从左边起最左边的建筑物的位置。思路签到题。代码#include<bits/stdc++.h>usingnamespacestd;int......
  • AtCoder Beginner Contest 353
    AtCoderBeginnerContest353A-Buildings求第一个\(h_i\)大于\(h_1\)的位置。模拟。点击查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,h[103];signedmain(){ cin>>n;cin>>h[1]; for(inti=2;i<=n;i++){ cin&......
  • AtCoder Beginner Contest 353
    A-Buildings(abc353A)题目大意给定\(n\)个数字,输出第一个大于第一个数的下标。解题思路依次与第一个数比较,大于则输出。神奇的代码n=input()a=list(map(int,input().split()))b=[i>a[0]foriina]ifTruenotinb:print(-1)else:print(b.ind......
  • AtCoder Beginner Contest 318 Ex Count Strong Test Cases
    洛谷传送门AtCoder传送门首先做一些初步的观察:A和B的解法是对称的,所以A对的方案数等于B对的方案数。同时若A和B同时对则每个置换环环长为\(1\),方案数为\(n!\)。所以,若设A对的方案数为\(x\),那么答案为\(n!^2-(x-n!)-(x-n!)-n!=n!^2+n!-x\)。......
  • 2022 Benelux Algorithm Programming Contest (BAPC 22) A 、I、J、L
    A.AdjustedAverage(暴力枚举+二分查找)分析读完题目可以发现k很小,那么考虑暴力做法的时间复杂度为\(O(C_n^k)\),对于\(k\leq3\)的其实可以直接暴力创过去,但对于\(k=4\)的情况显然不适用。那么对应\(k=4\)的情况考虑优化,可以选择将数分为两个集合,先用一个set存下其中一个集合的所......
  • 2024 ICPC National Invitational Collegiate Programming Contest, Wuhan Site
    目录写在前面IBKFMEDC写在最后写在前面补题地址:https://codeforces.com/gym/105143正式赛全程犯大病打铜了呃呃,以下按个人向难度排序。AIEEEEE!忍者为何!队长=san实际战犯!罪罚罪罚罪罚罪罚罪罚罪罚罪罚罪罚罪罚罪罚罪罪罚罪罚罪罚罪罚罪罚罪罚罪罚罪罚罪罚罪罚罪罚罪罚罪罚罪罚......
  • AtCoder Beginner Contest 352
    AtCoderBeginnerContest352A-AtCoderLine给\(N,X,Y,Z\)判断是否\(\min(X,Y)\leZ\le\max(X,Y)\)。模拟。点击查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,x,y,z;signedmain(){ cin>>n>>x>>y>......