Educational Codeforces Round 141 Editorial C~D

2023-05-16

1783C - Yet Another Tournament

分析

正解思路是贪心

开始自己也想的贪心:首先显然打败的人数越多越好,然后选择权值最小的人打败。

这个思路前半部分没问题,后半部分过不了样例的第二个数据。

现在打败人已经确定。问题是要具体打败哪几个人。开始想用dp来解决,但不会写,于是看题解。

题解思路:首先确定打败的人数winn,然后看跟自己对决前,n个人的胜场数。如果我能在打败

的人数中,打败胜场数同样为winn的人,那答案为n-winn;否则答案为n-winn+1(具体可以自己推导一下)

反思

在问题的后半部分,正解只需根据规律,关注是否打败了胜场数同样为winn的人即可。因为没找规律导致贪心思路在后半段出现了问题。

本题还有一种二分写法,详见 知乎cup-pyy 的题解。

代码实现

#include<bits/stdc++.h>
#define ll long long
#define rep(i,j,k) for(int i=j;i<=k;i++)
using namespace std;
int n,m,b[500005];
int vis[500005];
pair<int,int> a[500005];
void solve(){
    memset(vis,0,sizeof(vis));
    int xx=0,winn=0,sum=0;
    cin>>n>>m;
    rep(i,1,n){
        cin>>a[i].first;
        a[i].second=i-1;//胜场num 
        b[i]=a[i].first;
    }
    sort(a+1,a+n+1);
    rep(i,1,n){
        if(sum+a[i].first<=m){
            sum+=a[i].first;
            winn++;
            vis[a[i].second]=1;
        }
        else break;
    }
    if(vis[winn] || sum-a[winn].first+b[winn+1]<=m){
        cout<<max(1,n-winn)<<"\n";
    }
    else{
        cout<<n-winn+1<<"\n";
    }
} 
int main(){
    ios_base::sync_with_stdio(false); 
    cin.tie(0); 
    cout.tie(0);
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

1783D - Different Arrays

分析

一道动态规划题

第i位置的元素会引起第i+1位置的元素的+-变化。考虑以数组元素能变成的数字为状态进行转移。

设现有元素,有,则状态转移方程可表示为:

(写题时考虑了在本轮+-中,若存在某个与另一个相同,则岂不是把这个值向转移了两次,从而导致了重复? 但其实并没有重复。因为这两个虽然相同,但转移到当前数值的“路径不同”,因此这仍是两个不同的方案,这两次转移并不重复)

此外,对于上述dp方程,若,则+-结果相同,dp方程只需要用一次。

另外还要考虑数组元素可能减成负数,无法用数组下标来表示负数状态,所以要把所有状态加上一个值来保证所有状态都以非负数表示。

#include<bits/stdc++.h>
#define ll long long
#define rep(i,j,k) for(int i=j;i<=k;i++)
using namespace std;
const int maxn=1e5;
const int mod=998244353;
int n,a[305];
int f[2][maxn*2+10]; 
void solve(){
    cin>>n;
    rep(i,1,n){
        cin>>a[i];
    }
    int true_zero=100000, ans=0;
    f[0][a[2]+true_zero]=1;
    
    rep(i,2,n-1){
        rep(j,1,maxn*2){
            f[(i+1)&1][j]=0;
        }
        rep(j,1,maxn*2){ //以第i+2个数+-第i+1个数后的数值为状态进行转移 
            if(f[i&1][j] == 0) continue;
            if(j==(0+true_zero)){
                f[(i+1)&1][a[i+1]+j] += f[i&1][j];
                f[(i+1)&1][a[i+1]+j] %= mod;
            }
            else{ //注意这种表示法:
                //a[i+1]+(j-true_zero)+true_zero,先加上原来的数,再加上偏置 
                //a[i+1]-(j-true_zero)+true_zero,先减去原来的数,再加上偏置 
                f[(i+1)&1][a[i+1]+j] += f[i&1][j];
                f[(i+1)&1][a[i+1]+j] %= mod;
                f[(i+1)&1][a[i+1]-j+2*true_zero] += f[i&1][j];
                f[(i+1)&1][a[i+1]-j+2*true_zero] %= mod;
            }
        }
    }
    rep(i,1,maxn*2+5){
        ans+=f[n&1][i];
        ans%=mod;
    }
    cout<<ans;
}
int main(){
    ios_base::sync_with_stdio(false); 
    cin.tie(0);
    cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }
    return 0;
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Educational Codeforces Round 141 Editorial C~D 的相关文章

随机推荐

  • 新的开始( [USACO08OCT]打井Watering Hole)

    新的开始 newstart pas c cpp 题目描述 话说小 FF 在经历了上次 寻找古代王族遗产 的探险后 xff0c 成为了世界上最伟大的探险 家并拥有了一大笔财富 当然他不能坐吃山空 xff0c 必须创造财富 xff01 xff0
  • UOS配置本地APT源和外部软件包

    root 64 skill PC mount dev sr0 mnt mount mnt WARNING device write protected mounted read only root 64 skill PC vi etc ap
  • [二分答案] 洛谷P1873 砍树

    目录 题意样例样例输入 xff1a 样例输出 思路总结代码 题意 伐木工人米尔科需要砍倒M米长的木材 这是一个对米尔科来说很容易的工作 xff0c 因为他有一个漂亮的新伐木机 xff0c 可以像野火一样砍倒森林 不过 xff0c 米尔科只被
  • [区间DP]洛谷P1063 能量项链

    目录 题意样例样例输入 xff1a 样例输出 思路总结代码 题意 样例 样例输入 xff1a 4 2 3 5 10 样例输出 710 思路 1 经典区间DP题 算是合并石子的变种 只不过由一个点变成了一个区间 不过我们也可以用结构体存储 当
  • Linux命令行初接触-1 操作文件和目录

    操作文件 amp 目录 1 通配符含义常用通配符常用字符类类型匹配范例 2 mkdir 创建目录3 cp 复制文件和目录工作方式常用选项 4 mv 移动和重命名文件工作方式常用选项 5 rm 删除文件和目录工作方式常用选项注意事项 6 ln
  • 机器学习入入入入门(1)机器学习基本概念、引出深度学习

    机器学习入入入入门 xff08 1 xff09 0 前言1 基本步骤2 基本概念2 1 Hyperparameters2 2 local minima 3 linear model3 1 基础概念 4 piecewise linear cu
  • 深度学习蒟蒻入门——从0安装pytorch(CPU版)

    从0安装pytorch 1 检查自己的电脑有没有GPU2 安装CPU版的pytorch3 测试pytorch 1 检查自己的电脑有没有GPU 首先打开任务管理器 xff0c 选择性能栏 然后滑到最下 xff0c 看是否有GPU一项 xff0
  • 系统学习iOS动画 —— Stroke和路径动画

    这是要完成的动画 xff1a 先添加需要的代码 xff0c 这里需要将storyboard的ViewController换成TableViewController xff0c 将Under Top Bars 和 Under Bottom B
  • 不知道这些网站还做什么程序员呀!

    今天我就来总结一些程序员必备的网站 xff0c 囊括开源项目 解决bug 技术分享 一线资源和自我提升的网站 xff0c 希望能对广大程序猿有所帮助 xff0c 赶紧给我收藏起来 xff0c 下次刷不到了可别说我没提醒你 我们首先来看一下国
  • (音视频开发)WebRTC进阶流媒体服务器开发-多人互动架构

    一 xff1a 多人互动架构方案 xff08 一 xff09 WebRTC回顾 xff0c 两层含义 xff1a 1 WebRTC是google开源的流媒体客户端 xff0c 可以进行实时通讯 xff0c 主要应用于浏览器之间进行实时通讯
  • 10种linux下磁盘快照方式恢复系统

    导读大家都知道windows系统有一个磁盘快照的功能 xff0c 在windows2003中系统恢复开始依赖于一个叫做硬盘快照服务 Volume Snapshot Service 的服务 xff0c 他能够自动创建系统快照 包括正在使用的文
  • ubuntu安装go开发环境

    一 为ubuntu20 04更新源 给root用户设置密码 xff1a 命令 xff1a sudo passwd root 备份原来的源 xff0c 命令 xff1a sudo cp etc apt sources list etc apt
  • 如何修复Ubuntu中包缓存文件被毁问题

    导读今天 xff0c 我尝试更新我的 Ubuntu 18 04 LTS 的仓库列表 xff0c 但收到了一条错误消息 xff1a E The package cache file is corrupted it has the wrong
  • 1002 A+B for Polynomials (25分) 详解+易错点

    注意点 xff1a 系数为0 xff0c 则不输出 xff0c 例 xff1a 其中 1和1相加为0 xff0c 则在输出时避免这一项 xff0c 而且要注意结果的K值 xff0c 不要包括这一项 xff0c 思路 xff0c 利用结构体存
  • Linux远程桌面的选择

    Linux的远程桌面主要分两个部分 xff1a Linux客户机连Linux服务器和Windows客户机连Linux服务器 xff0c 还有现在用平板电脑连远程桌面 Linux客户机连Windows服务器比较简单没啥可说的 xff0c rd
  • Kali Linux mdk3WiFi洪水攻击 攻击路由器 生成虚假WiFi WiFi身份验证攻击可使连接WiFi的手机掉线重连抓包

    将无线网卡转换为监听模式 airmon ng start wlan0 查找附近无线网络 airodump ng wlan0mon Authentication DoS xff1a xff08 洪水攻击 xff0c 又叫做身份验证攻击 xff
  • 大一java程序设计的某次作业题解

    题目描述 xff1a 设计程序实现输入日期及机票张数 xff0c 计算出应付金额 假设北京至上海的机票全价为 1200 元 张 xff0c 以 2017 年为例进行程序编写 xff0c 所有的法定假日 xff0c 机票无折扣 xff1b 除
  • D. Make It Round(1759D)

    要求n k后缀0数量最多 xff08 k lt 61 m xff09 xff0c 且n k尽可能大 比赛时思路 xff08 错误 xff09 xff1a 10是由2和5组成 xff0c 故先统计n的因子包含2的个数num2 包含5的个数nu
  • Codeforces Round #841 (Div. 2)

    B Kill Demodogs 分析 显然要选择和两斜线的元素相加 所以答案可以表示为 xff1a 即 xff1a 根据公式 得答案为 但答案不能直接得这个 因为n的范围为1e9 xff0c 而ull的范围为1e20 xff0c 答案的第一
  • Educational Codeforces Round 141 Editorial C~D

    1783C Yet Another Tournament 分析 正解思路是贪心 开始自己也想的贪心 xff1a 首先显然打败的人数越多越好 xff0c 然后选择权值最小的人打败 这个思路前半部分没问题 xff0c 后半部分过不了样例的第二个