题意:给定一个歌曲演唱的序列,第i个数字代表第i首歌由ai号乐队演唱;用最少的操作将这些歌改成1-m号乐队演唱,且每个乐队演唱歌曲数的最小值最大。问操作数

问题解法:首先分析如何让最小值最大,有两种方式来提升最小值,第一种是将1-m范围外的乐队演唱的歌分给1-m范围内的演唱数最小的乐队,第二种是将1-m内演唱数较大的乐队的歌分一些给1-m内演唱数较小的乐队。所以题目的贪心策略也就基本确定了

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<climits>
 4 using namespace std;
 5 int a[10001];
 6 int b[10001]={};
 7 int n,m;
 8 int board;
 9 bool check()
10 {
11     for(int i=1;i<=m;i++)
12     {
13         if(b[i]<board)
14         {
15             return true;
16         }
17     }
18     return false;
19 }
20 int main()
21 {
22     cin>>n>>m;
23     for(int i=1;i<=n;i++)
24     {
25         cin>>a[i];
26         if(a[i]<=m)
27         {
28             b[a[i]]+=1;
29         }
30     }
31     int res1,res2=0;
32     board=n/m;
33     for(int i=1;i<=n;i++)
34     {
35         if(a[i]>m)
36         {
37             for(int j=1;j<=m;j++)
38             {
39                 if(b[j]<n/m)
40                 {
41                     b[j]+=1;
42                     a[i]=j;
43                     res2+=1;
44                     break;
45                 }
46             }
47         }
48     }
49     while(check())
50     {
51         for(int i=1;i<=n;i++)
52         {
53             if(b[i]>board)
54             {
55                 for(int j=1;j<=m;j++)
56                 {
57                     if(b[j]<board)
58                     {
59                         for(int k=1;k<=n;k++)
60                         {
61                             if(a[k]==i)
62                             {
63                                 a[k]=j;
64                                 b[i]-=1;
65                                 b[j]+=1;
66                                 res2+=1;
67                                 break;
68                             }
69                         }
70                         if(b[i]<=board)
71                         {
72                             break;
73                         }
74                     }
75                 }
76             }
77         }
78     }
79     res1=INT_MAX;
80     for(int i=1;i<=m;i++)
81     {
82         res1=min(res1,b[i]);
83     }
84     cout<<res1<<" "<<res2<<endl;
85     for(int i=1;i<=n;i++)
86     {
87         cout<<a[i]<<" ";
88     }
89     return 0;
90 }

转载于:https://www.cnblogs.com/shao0099876/p/7297011.html

codeforces - 723C 题解相关推荐

  1. Dominated Subarray[codeforces 1257C]题解

    Dominated Subarray[codeforces 1257C] CF-1257C(Dominated Subarray) 题目 输入 输出 题目大意 样例输入 样例输出 CF-1257C(D ...

  2. Codeforces 833B 题解(DP+线段树)

    题面 传送门:http://codeforces.com/problemset/problem/833/B B. The Bakery time limit per test2.5 seconds m ...

  3. Codeforces 1344 题解

    A 假设所有的 \((i+a_i)\) 模 \(n\) 意义下构成排列则答案为 YES,否则为 NO. 时间复杂度 \(O(n)\) 或 \(O(n\log n)\). 代码: 79150268 B ...

  4. Codeforces 1314 题解

    这场整体质量感觉可以算 2020 年度(目前为止)最垃圾. A 按数值从小到大扫描,维护一个优先队列,每遇到一个数加入队列,每次数值发生 \(+1\) 时弹掉队列中价值最大元素,然后把此时队列中所有元 ...

  5. Codeforces 1338 题解

    A 对于每个 \(i\) 我们求出 \(b_i\) 表示 \(i\) 这个数最少要增加多少(\(\max^i_{j=1}a_j-a_i\)),答案等于最小的 \(k\) 使得 \(2^k-1\ge \ ...

  6. Codeforces 1149 题解

    A 特判全是 \(2\),对于有 \(1\) 的情况把 \(1\) 放到第二个和最后. 时间复杂度 \(O(n)\). 代码: 76492031 B 考虑只有一次询问的情况,有一个 \(O(n^3)\ ...

  7. Codeforces 1025 题解

    A 若 \(n=1\) 则答案为 YES,否则答案为 YES 当且仅当存在两个相同的字符. 时间复杂度 \(O(n)\). 代码: 76484733 B 求出所有 \(\text{lcm}(a_i,b ...

  8. Codeforces 1188 题解

    A 首先对于 A1 题,可以加减任意实数,结论是答案为 YES 当且仅当没有度数为 \(2\) 的点.必要性显然,充分性通过下面的构造来证明. A2 题的构造:考虑随便找一个叶子节点为根,记为 \(r ...

  9. codeforces #1 题解

    codeforces1A 题目链接:http://codeforces.com/problemset/problem/1/A 题意:给定一个n*m的矩形,然后给一个a*a的地板,求最少需要多少地板可以 ...

最新文章

  1. 从零开始构建:使用CNN和TensorFlow进行人脸特征检测
  2. “tensorFromBlob”: 不是“at::DeprecatedTypeProperties”的成员
  3. nginx通过用户和密码来实现认证功能
  4. oracle12c bug,Oracle12c R2注意事项: 因BUG生成大量的trace file 包含KRB: (rman module)
  5. boost::mpl::less_equal相关的测试程序
  6. 又翻出来老电视剧看了看....
  7. javascript --- [express+ vue2.x + elementUI]登陆的流程梳理
  8. 蚂蚁暑期实习前端面试
  9. 《Orange’s 一个操作系统的实现》3.保护模式4----LDT(Local Descriptor Table)
  10. mysql锁表语句,从理论到实践!
  11. msxml3.dll 错误 '80072efd' ---asp 网站报错
  12. 这些地区的大学,取消英语四六级口语考试!
  13. 油管最火KMP算法讲解,阿三哥的源代码!
  14. ssh开启图形界面_分享|3 个 Linux 上的 SSH 图形界面工具
  15. 苹果平板电脑服务器已停止响应,苹果平板电脑ipad完全死机怎么办【解决方法】...
  16. 读取经纬度坐标并存储为字典格式,即key为ID,value为轨迹点
  17. 壁挂炉开启采暖模式后,水泵24小时运转,安装联动线(联控线)后完美解决
  18. 华为eNSP模拟器操作技巧之关闭信息提示
  19. PCB与PE(大地)相连技术文章
  20. 梦之旅游戏攻略html5,《梦之旅1:梦境》攻略

热门文章

  1. 用java项目做Hibernate的增删查改,和分页(hibernate-distribution-3.6.0.Final为例)
  2. 解决:WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions.
  3. omap3530 linux串口驱动,LINUX下OMAP3530接MT9P031的摄像头驱动调试 给力的一周
  4. OpenCV视频解码器
  5. 计算机中实现10进制转换成二进制c编程
  6. 国行new moto x升级android6,摩托罗拉Android6.0升级计划:全都在
  7. 熊掌:SEO从站点到数字的转变
  8. mysql_5.7_windows安装步骤
  9. 苹果和安卓到底有何不同?
  10. 51nod 1430:奇偶游戏 博弈