首页 > 其他分享 >Codeforces Round 893(div2)

Codeforces Round 893(div2)

时间:2023-08-16 14:14:06浏览次数:47  
标签:893 饼干 题意 int ll Codeforces long solve div2

Codeforces Round 893(div2)

[A题传送门](Problem - A - Codeforces)

A题意:

我们有a+b+c个瓶盖,选手1可以拿指定的a个或者c个里面的一个,选手2可以拿指定的b个或者c个里面的一个,可以拿完最后一个的即为获胜者,每个人都有最优策略。

A思路:

这个题一开始想错了,主要是没有读懂题意,理解清楚题意后也就简单了,最好的方法就是选手1和2都先拿c里面的,因为其他的全是他们各自专属的,只有c是公共的,所以我们只需要将c分出去即可,最后统计一下每个人拿到的个数,拿的多的就是获胜者,如果相同,因为选手1是先手,那么选手2获胜。

A代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){
    ll a,b,c;
    cin>>a>>b>>c;
    ll a1=c/2+(c%2);
    ll b1=c/2;
    a+=a1;
    b+=b1;
    if(a>b){
        cout<<"First"<<endl;
    }
    else{
        cout<<"Second"<<endl;
        
    }
}
int main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

B题传送门

B题意:

有n个站牌,有m个饼干贩卖员,他们停在不同的站牌上,当一个人(本身有无限多饼干)通过一个站牌时,如果满足下,面一种情况,就会吃掉一块饼干,而你要做的就是移走一个贩卖员,使得这个人吃的饼干数目尽可能小,输出最小饼干数目以及可移动的贩卖员数目
1.遇到贩卖员他会立刻买一个饼干并吃掉
2.如果他还没吃饼干,他会拿出一块饼干并吃掉
3.距离吃上次饼干已经过去d分钟了,他会再次吃一块饼干

B思路:

我们可以先求一遍答案,再枚举要移除的贩卖员,退还他所做出的贡献,再加上没有他产生的贡献即可。

B代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
void solve(){
    int n,m,d;
    cin>>n>>m>>d;
    std::vector<int> v(m+2);
    for(int i=1;i<=m;i++){
        cin>>v[i];
    }
    v[0]=1;
    v[m+1]=n+1;

    int cnt=1;//一开始要吃一个,cnt是我们一开始不移除要吃的
    for(int i=1;i<=m+1;i++){
        cnt+=(v[i]-v[i-1]-1)/d;
        if(v[i]!=1&&v[i]!=n+1){
            cnt++;
        }
    }
    int ans=INF;
    int num=0;
    for(int i=1;i<=m;i++){
        int t=cnt;
        t-=(v[i]-v[i-1]-1)/d+(v[i+1]-v[i]-1)/d;
        //这是第i个贩卖员被移除所移除的影响
        if(v[i]!=1){
            t-=1;
        }
        t+=(v[i+1]-v[i-1]-1)/d;//这是移除后所产生的影响
        if(ans>t){
            ans=t;
            num=1;
        }
        else if(ans>=t){
            num++;
        }
    }
    cout<<ans<<" "<<num<<endl;
    
}
int main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

C题传送门

C题意:

有一个名为GCD permutations的游戏,玩家有以下操作:
首先,选择一个长度为n的序列,大小为1-n
然后对于每一个从1到n的数字计算di=gcd(ai,a(i%n+1))
最后的得分就是ans=d1+...+dn
而我们要做的就是找到一个排列,使得得分最大

C思路:

看了网上大佬的思路,这个就是贪心的想法,贪心着想着i的后面放2i,4 * i,8i...
大概是明白了,如果我们要求的得分是两个数的最大公约数,那么事实上最大公约数的最优(最大)情况一定是两个数中比较小的那个。

C代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;

void solve(){
    int n;cin>>n;
    vector<int> vis(n + 1);
    for(int i = 2;i <= n; ++i){
        if(vis[i])continue;
        for(int j = i;j <= n;j = 2 * j){
            cout<<j<<' ';
            vis[j] = 1;
        }
    }
    cout<<1<<'\n';
}
int main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

标签:893,饼干,题意,int,ll,Codeforces,long,solve,div2
From: https://www.cnblogs.com/du463/p/17633845.html

相关文章

  • ABC314 E和CF892 Div2D-E
    ABC314EE-Roulettes(atcoder.jp)大致意思是给你n个轮盘,第i个轮盘等概率的p[i]个点数,玩一次c[i]价钱,问要达到m点的最小期望花费是多少,每次可以任意选一个。乍一看很像背包,偏了方向,所以当时没有做出来。也考虑过其它的DP,关键是0怎么处理没搞明白所以赛后看他人的代码和题解......
  • HDU 4893(线段树区间更新)
    Wow!SuchSequence!TimeLimit:10000/5000MS(Java/Others)    MemoryLimit:65536/65536K(Java/Others)TotalSubmission(s):3856    AcceptedSubmission(s):1085ProblemDescriptionRecently,Dogegotafunnybirthdaypresentfromhisnewf......
  • Codeforces Round 892 (Div. 2)
    CodeforcesRound892(Div.2)A.UnitedWeStand简述题意给定一个长度为$n$的数列$a$,要求将$a$的每个元素分配到数列$b$,$c$中,满足以下两个要求$b,c$不为空,即$l_b\geq1,l_c\geq1$。对于任意$i$和$j$$(1\leqi\leql_b,1\leq......
  • Codeforces Global Round 15
    CodeforcesGlobalRound15A-SubsequencePermutation思路:找出原串与排序后的串不同的个数#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn;cin>>n;strings;cin>>s;stringt=s;sort(t.begin(),t.end());intans=0;......
  • Codeforces Round 892 (Div. 2) A-E
    A.UnitedWeStand题意:给出一个长为\(n\)的数组\(a\),将其中的元素分别放到空数组\(b\)和\(c\)中,使得\(c\)中的任意一个元素都不是\(b\)中任意一个元素的因数,并且两个数组都不是空数组Solution把\(a\)中最小的数放到\(b\),其它的都放到\(c\),一定可以保证要求成立voidsolve(){......
  • Codeforces Ronud 892(Div.2)
    CodeforcesRonud892(Div.2)关于A题我有话说传送门题意给定一个长度为n的数组a,问能否将元素全部放入两个空数组b和c中,使得b和c数组同时满足非空,且c数组中没有任何数是b数组中的数的除数,如果可以输出一种存储方案,不可以就输出-1思路当天晚上一开始没有做出来,我一开始的思路是......
  • CodeForces-1798#B 题解
    正文开个数组\(last_k\)统计\(a_{i,j}\)最后买彩票的时间,再开一排桶\(day_t\)记录该天最后买彩票的有哪些人(即:有\(p\)满足\(last_p=t\)的集合)。将\(last_k\)放入\(day_t\)中,判断\(day_t\)中是否存在空桶,若有则无解(因为没有人在当天是最后买彩票的)。因为本题是......
  • 2023.08.12 codeforces round 892 div2
    年轻人的第三场div2(已完成:ABCDE)rank:1265solved:4ratingchange:+276newrating:1323A.UnitedWeStand题意:给定一个数列a,问是否能分成两个非空的数列b和c,使得c中任意一个数不是b中任意一个数的因子;若x是y的因子则有x<=y;因此不妨将数列的最大值放入c,把剩下的数放入b;注意数列中......
  • Codeforces Round 892 (Div. 2)
    Preface最接近橙名的一场,可惜给我一个小时也没想到E的关键点,后面徐神一点拨就懂了虽然现在这个号已经到渡劫局了但因为之前有场比赛给了ztc一份代码然后他直接没咋改交上去了,估计下次rollRating的时候这个号要掉200来分了嘛不过也无所谓反正下次打另一个号冲分,而且像我这种永......
  • 【题解】Educational Codeforces Round 146(CF1814)
    而且怎么感觉E,F比D要简单很多,大概是因为比较套路吧[惊恐]A.Coins题目描述:本题一共有\(t\)组数据。每组数据包含两个整数\(n\)和\(k\),如果存在两个非负整数\(x,y\),满足\(2\timesx+k\timesy=n\),输出YES,否则输出NO(yes,Yes,NO,nO均可)。题目分析:注意到\(y\)可......