首页 > 其他分享 >2024.4.7 训练1(rating) Codeforces Global Round 25

2024.4.7 训练1(rating) Codeforces Global Round 25

时间:2024-04-08 13:34:18浏览次数:21  
标签:rating 2024.4 25 int ll cin long vector solve

https://codeforces.com/contest/1951

题解参考:https://zhuanlan.zhihu.com/p/691034931

A题

一开始的思路比较绕,wa很多发卡了半小时才过。hansun的思路比较硬直,他在极短的时间内过了A

hansun的题解:https://codeforces.com/contest/1951/submission/255262403

我的想法是分奇偶情况再细分情况讨论,但是这样会造成讨论情况过多导致考虑不周卡住。参考hs的代码,把特殊情况单独拎出来特判,剩下的常规判断就行。

补题AC代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;

void solve(){
    ll n; cin>>n;
    string s; cin>>s;
    ll cnt=count(s.begin(),s.end(),'1');
    if(cnt==2) {
        for (int i = 0; i < n - 1; i++) {
            if (s[i] == s[i + 1] && s[i] == '1') {
                cout << "NO\n";
                return;
            }
        }
    }
    if(cnt&1) cout<<"NO\n";
    else cout<<"YES\n";

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

    ll t; cin>>t;    while(t--) solve();
    return 0;
}

B题

也是卡了半小时,卡在分类情况过多。比赛的时候差一点调出来,但不想调了改cuibo的代码过了去看C了

对于贪心模拟的题目,分类讨论的标准至关重要。一开始我的标准是牛在原地不动或者交换到第一个,这个标准是错误的,因为牛在原地不动是性价比最低的,如果前面有分数更高的牛答案就是0,没有的话也会浪费前面的可以打败的牛。正确的分类标准应该是要么换到第一个去,要么换到第一个比它大的牛那里去,然后特判一下第一个大的牛在第一个的情况,然后模拟就行。

#include <bits/stdc++.h>
#define ll long long
using namespace std;

void solve(){
    ll n,k; cin>>n>>k;
    vector<ll> a(n+1);
    for(int i=1;i<=n;i++) cin>>a[i];
    ll ans1=0,ans2=0;
    ll flag=0;
    for(int i=1;i<k;i++){
        if(a[i]>a[k]){
            flag=i; break;
        }
    }
    if(flag){
        if(flag!=1) ans1=1;
        for(int i=flag+1;i<=n;i++) {
            if(a[i]<a[k]) ans1++;
            else break;
        }
    }
    if(k!=1) swap(a[1],a[k]);
    for(int i=2;i<=n;i++){
        if(a[i]<a[1]) ans2++;
        else break;
    }
    cout<<max(ans1,ans2)<<"\n";
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    ll t; cin>>t;    while(t--) solve();
    return 0;
}

C题

赛时cuibo说可能时DP,我看了一下,一眼背包(艹),但赛时没看清楚题目调不出来,赛后看清楚了发现可以做但是会爆long long

DP爆long long代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    ll t; cin>>t;
    while(t--){
        ll n,m,k;cin>>n>>m>>k;
        vector<ll> w(n+1);
        vector<vector<ll>> dp(n+1,vector<ll>(k+1));
        for(ll i=1;i<=n;i++){
            cin>>w[i];
        }
        dp[0][0]=0;
        for(ll i=1;i<=k;i++){
             if(i<=m) dp[0][i]=i*w[1];
             else dp[0][i]=0x3f3f3f3f;
        }
        for(ll i=1;i<=n;i++){
            for(ll j=0;j<=k;j++){
                dp[i][j]=dp[i-1][j];
                for(ll s=0;s<=m;s++){
                    if(j>=s) dp[i][j]=min(dp[i-1][j-s]+((j-s)+w[i])*s,dp[i][j]);
                }
            }
        }
        cout<<dp[n][k]<<"\n";
    }
    return 0;
}

贪心即可。分析发现,增加的票价与购买的日期无关,只和已购买的票数有关。那样的话可以将每日价格从小到大排序,依次每天买m张,最后一天买k%m张。对于溢价,第一天为0,之后每天m累乘上之前的和,最后一天处理一下即可。

#include <bits/stdc++.h>
#define ll long long
using namespace std;

void solve(){
    ll n,m,k; cin>>n>>m>>k;
    vector<ll> a(n+1);
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a.begin(),a.end());
    ll re=k; ll ans=0;
    for(int i=1;i<=n;i++){
        if(re==0) break;
        if(re>=m) {
            ans+=m*a[i];
            re-=m;
        }
        else {
            ans+=re*a[i];
            re=0;
        }

    }
    ll t=k/m; ll pri=0;
    for(int i=0;i<=t;i++){
        if(k-pri<m){
            ans+=(k-pri)*pri;
            break;
        }
        else{
            ans+=m*pri;
            pri+=m;
        }
    }
    cout<<ans<<'\n';

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

    ll t; cin>>t;    while(t--) solve();
    return 0;
}

D题

贪心,如果n%k==0,那么只需要一个摊位为n/k即可。否则的话,就试图让第二个摊位为1,在该摊位买掉k-1个商品,判断第一个摊位能否只买一个就行。

#include <bits/stdc++.h>
#define ll long long
using namespace std;

void solve(){
    ll n,k; cin>>n>>k;
    vector<ll> a;
    if(n%k==0){
        cout<<"YES\n"<<"1\n";
        cout<<n/k<<'\n';
        return;
    }
    else if(n<2*(n-k+1)){
        cout<<"YES\n"<<"2\n";
        cout<<n-k+1<<" "<<1<<'\n';
        return;
    }
    else cout<<"NO"<<"\n";
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    ll t; cin>>t;    while(t--) solve();
    return 0;
}

标签:rating,2024.4,25,int,ll,cin,long,vector,solve
From: https://www.cnblogs.com/qiujianACM/p/18120234

相关文章

  • [护网必备]知攻善防实验室蓝队应急响应工具箱v2024.4
    前言蓝队工具箱是为打造一款专业级应急响应的集成多种工具的工具集,由真实应急响应环境所用到的工具进行总结打包而来,由ChinaRan404,W啥都学,清辉等开发者编写.把项目现场中所用到的工具连同环境一同打包,并实现“可移植性”“兼容性”“使用便捷”等优点。集成模块:“常用工具......
  • 250 Stylized Mountain Cave Textures - Cliff Rock Crystal Gravel More
    250多种风格化的水晶、岩石、悬崖、砾石、矿石、熔岩和其他岩石纹理的集合,用于山地和洞穴风格化/幻想/rpg风格的游戏环境。在这个系列中,你会在风格化/幻想/rpg风格的游戏中找到大量适合山区和洞穴环境的纹理——水晶、洞穴地板/墙壁、岩石、悬崖、砾石、熔岩、岩石土、岩石地......
  • 软件设计师25--逻辑结构设计
    软件设计师25--逻辑结构设计考点1:关系模式相关概念数据模型关系模型相关概念完整性约束考点2:E-R图转换关系模式逻辑结构设计-E-R模型转关系模式E-R图转关系模式考点1:关系模式相关概念数据模型层次模型网状模型关系模型面向对象模型注:数据模型三要素:数据结构......
  • 日记 2024.4.7:子集卷积
    日记2024.4.7:子集卷积记号\(F(x)=\sum_{S\subseteq[n]}f_Sx^{S}\)是一个集合幂级数,其中\([n]=\{1,2,\cdots,n\}\),\(f_S\)是一个数组,然后写成像生成函数(其实是“形式幂级数”)的形式,\(x^S\)的这个指数是没意义的。FWT/FMT即两个集合幂级数的并、交、异或卷积运算。h......
  • 2024.4.7每日一题
    mysql1.创建索引idx_emp_no,查询emp_no为10005,使用强制索引forceindex(idx_emp_no)2.现在在last_update后面新增加一列名字为create_date,类型为datetime,NOTNULL,默认值为'000000:00:00'这里的默认值要写成,我还不知道为什么要这样default'2020-10-0100:00:00'java1......
  • 2024.4 做题纪要
    aaaaaaaaaaaaaaaaa大致是在成七集训,虽然挺多都是3月底的不过还是整一下。目录2024.3.30T2简单题2024.4.1T3木棍AGC059EGrid3-coloring2024.4.2T1斩首(Gym104901F)T3战争2024.4.5T3Text2024.4.7CF1707DPartialVirtualTreesCF1874EJellyfishandHack2024.3.30T2......
  • Opencv实现边界填充、两个图片像素直接相加后超过255的处理方式(阈值处理方式),一个窗口
     opencv两个图片直接相加,会直接相加,如果超过255,会取模。 print((img_cat+img_cat2)[:5,:,0])#0-255若相加越界后294用294%256获得余数38可以使用这种方式查看。展示的是前5行,所有列的第一个通道的值。还有一种方法是cv2.add(),这个方法会直接将超过255的值设置为25......
  • 【25.0】Django框架之auth模块
    【一】Auth模块引入我们在创建一个Django项目之后,直接执行数据库迁移命令会自动生成很多表django_sessionauth_userDjango在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user表,并且必须是管理员用户才能进入【二】创建超级用户(管理员)......
  • openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Gener
    文章目录openGauss学习笔记-257openGauss性能调优-使用PlanHint进行调优-CustomPlan和GenericPlan选择的Hint257.1功能描述257.2语法格式257.3示例openGauss学习笔记-257openGauss性能调优-使用PlanHint进行调优-CustomPlan和GenericPlan选择的Hint257.......
  • DS2500 Python实践问题
    2024年春季Python分级指南在DS2500中,您将有一个项目、实验室、家庭作业和Python实践问题(PPP),所有这些都有助于您的成绩。对于这项工作中的一些,你的分数将完全基于正确性,而对于其他工作,你的编码/可视化风格将发挥重要作用。正确性:实验室和PPP实验室和购买力平价是自动评分的,如果自动......