首页 > 其他分享 >AGC018做题笔记

AGC018做题笔记

时间:2025-01-19 09:31:59浏览次数:1  
标签:项目 int AGC018 笔记 vector maxn ans 做题 rk

Atcoder Grand Contest 018

B - Sports Festival

题目大意

有 \(N\) 个人参加 \(M\) 个项目的运动会,这 \(M\) 可以至多被删去 \(M-1\) 个。

第 \(i\) 个人会参加序列 \(a_i\) 中第一个可以被参加的项目 \(a_{i,j}\)。

现在要使参加人数最多的项目人数最少,求这个最小人数。

解题思路

显然,删去 \(M-1\) 个项目一定是最优的。

\(N\) 和 \(M\) 都比较小,考虑直接贪心并模拟:

  • 最开始假设所有的 \(M\) 个项目全部设立。
  • 求出每个项目的人数,然后将人数最多的项目删去,知道只剩一个项目位置。

这样的策略显然是最优的。

时间复杂度 \(O(N \times M)\),直接按照该策略模拟即可。

int n,m;
cin>>n>>m;

vector<int> rk(n+5); //每个人当前会参加的项目
vector<vector<int> > a(n+5,vector<int>(m+5));
for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++){
        cin>>a[i][j];
    }
    rk[i]=1; //最开始一个都没有删除
}

int ans=1<<30;
vector<bool> deleted(m+5);

while(114514){
    int loc=0,maxn=0;
    vector<int> cnt(m+5,0);

    for(int i=1;i<=n;i++){
        while(deleted[a[i][rk[i]]])rk[i]++; //更新 rk
        if(a[i][rk[i]]==0)continue; 

        cnt[a[i][rk[i]]]++; //贡献人数加一
        if(cnt[a[i][rk[i]]]>maxn){ //更新人数最多的项目
            maxn=cnt[a[i][rk[i]]];
            loc=a[i][rk[i]];
        }
    }
    if(!maxn)break; //如果 maxn 为0,代表删的一个项目不剩了

    deleted[loc]=1;
    ans=min(ans,maxn);
    for(int i=1;i<=n;i++){
        if(a[i][rk[i]]==loc)rk[i]++;
    }
}

cout<<ans<<"\n";

标签:项目,int,AGC018,笔记,vector,maxn,ans,做题,rk
From: https://www.cnblogs.com/Sunbutstfan1106/p/18679230

相关文章

  • Elasticsearch 笔记
    目录ES相关概念概述核心概念1)索引index2)类型type3)字段Filed4)映射mapping5)文档document6)集群cluster7)节点node8)分片和复制shards&replicas9)接近实时NRTElasticSearch字段的类型字段类型映射参数stringindex分析store存储Numericindex分析store存储dateindex分......
  • 折腾笔记[6]-使用rust绘制三维画面
    摘要使用rust绘制界面;界面包含一个三维坐标轴,使用鼠标旋转坐标轴,左侧显示对应的旋转向量,四元数等信息.UseRusttodrawtheinterface;theinterfacecontainsathree-dimensionalcoordinateaxis,whichcanberotatedusingthemouse,andthecorrespondingrotati......
  • 运算放大器应用电路设计笔记(四)
    动态范围表示正常工作时最小振幅与最大振幅的范围。例如,最小振幅为-14v,最大振幅为+14v,则动态范围为±14v,也有用绝对值或有效值表示振幅,最大电压与最小电压之比为动态范围,也称为多少dB。这时,最大振幅由电源电压决定,最小振幅由噪声或失调电压决定。确保动态范围的最简单方法......
  • 数学笔记
    定义一个形如\(x=a+bi\)的数为复数。上式中的\(i\)为虚数单位,有\(i\cdoti=-1\)。两个复数\(x\)和\(y\)相等,当且仅当\(x_a=y_a\)且\(x_b=y_b\)。对于一个复数\(x\),我们称\(a\)为\(x\)的实部,\(b\)为\(x\)的虚部。当\(a=0\)时,称\(x\)为纯虚数。......
  • NixOS使用笔记
    官方源:https://channels.nixos.org/清华源:https://mirrors.tuna.tsinghua.edu.cn/nix-channels本文使用清华源。升级系统官方文档:https://nixos.org/manual/nixos/stable/#sec-upgrading比如升级到24.11,首先升级到#sudonix-channel--addhttps://channels.nixos.org/nixo......
  • [数据结构学习笔记16] 线性查找(Linear Search)
    查找算法是指从一个集合里比如数组,列表,树里查找我们想要的值。我们从最简单的线性查找开始。线性查找,就是遍历集合里的元素,查看是否有和我们想要查找的值相同的,有则查找成功,没有则查找失败。比如:5,8,6,9,1,7,3,2,4我们要找3,那从5开始依次往后,到了第7个(下标6),我们找到了3。如果我们要找......
  • 计数问题学习笔记
    基础差得死,整版讲课课件能看懂的就\(10\%\),所以过来补一补。数学那一块差不多,计划单开一个博客。分类整理以下吧。卡特兰数问题引入有一个大小为\(n\timesn\)的网格图,每次从\((x,y)\)只能走一步到\((x+1,y)\)或\((x,y+1)\),求不走到对角线即\(y=x\)下方,但可以触碰对......
  • base中TCP/IP基础学习笔记
    base中的网络模型的学习笔记一.关于TCP/IP网络模型引言对于同一台设备上的进程间通信,有很多种方式,有管道、消息队列、共享内存、信号等方式,对于不同设备上的进程间通信,就需要网络通信,设备是多样的,所以要兼容各种各样的设备,就协商出了一套通用的网络协议。网络协议是分层......
  • 1月省选联考做题记录
    CF1434EAConvexGametag:DP,交换值域,博弈论,凸性。首先,由于每组数是分开考虑的,题目可以看作一个组合游戏,也就是说我们可以分开考虑每个游戏的SG值。对于每一组游戏,套路地考虑构建一个有向图模型。注意到每一步的选择与差是有关的,考虑记录\(f_{i,j}\)为,现在\(b\)数组的最后......
  • Pandas使用笔记
    个人学习笔记日期转换索引日期格式:2023-09-1215:00:00转换为:2023-09-12importpandasaspd#假设你的DataFrame名为df,索引是2023-09-1215:00:00#这里创建一个示例DataFrame用于演示data={'value':[1,2,3]}index=pd.to_datetime(['2023-09-1215:00:......