题面

解析

辣鸡题面毁我青春

因为翻译的题面中写了一句\(剩下的n−k个不会完成\).

所以就以为剩下的\(n-k\)个都会算上不满意值.

(然而事实是只有\(p-k\)个...)

首先根据主席的规则,我们可以先钦定\(p-k\)个绝对不会被选的任务,

把\(b\)从大到小,再把\(a\)从小到大取最后面就行了.

(应该很容易理解吧...)

然后再把剩下的按\(a\)从大到小,

再把\(b\)从大到小排序,取前\(k\)个就是白头发最多的情况了.

这里把\(b\)从大到小是因为剩下的\(p-k\)个还要使不满意度最大,

所以从大到小的话就有了更多机会.

然后考虑剩下的\(p-k\)个,

因为之前钦定的不一定是不满意度最大的情况,

因此我们要再按第一次的顺序,

取已经取了的前\(k\)个中在最后面的任务的后面\(p-k\)个就行了.

这里听起来可能有点绕口...

因为我们要保证剩下的\(p-k\)个不能干扰前面的\(k\)个(即在主席的规则中优先度更高).

再自己\(yy\)下应该就行了.

还有一点要注意的是,

因为有两个任务可能\(a,b\)都相等,

因此两次排序的结果可能不一样(因为这个WA到吐...)

所以在排序的时候把编号作为第三关键字就好了.

code:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #define fre(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
  6. using namespace std;
  7. inline int read(){
  8. int sum=0,f=1;char ch=getchar();
  9. while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
  10. while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
  11. return f*sum;
  12. }
  13. const int N=200005;
  14. struct node{int x,y,tag,id,pos;}a[N],b[N];
  15. int n,K,P,sum=0x3f3f3f3f,ret=0;
  16. inline bool cmp(node a,node b){
  17. return a.y!=b.y? a.y<b.y:a.x>b.x;
  18. }
  19. inline bool cmp1(node a,node b){
  20. // if(a.tag!=b.tag) return a.tag<b.tag;
  21. if(a.x!=b.x) return a.x>b.x;
  22. return a.y>b.y;
  23. }
  24. inline bool cmp2(node a,node b){return a.y!=b.y? a.y>b.y:a.x<b.x;}
  25. signed main(){
  26. n=read();P=read();K=read();
  27. for(int i=1;i<=n;i++) a[i].x=read(),a[i].y=read();
  28. for(int i=1;i<=n;i++) a[i].id=i;
  29. sort(a+1,a+n+1,cmp2);
  30. memcpy(b,a,sizeof(b));
  31. for(int i=1;i<=n;i++) a[i].pos=i;
  32. int ss=P-K;
  33. sort(a+1,a+n-ss+1,cmp1);
  34. for(int i=1;i<=K;i++) printf("%d ",a[i].id);
  35. for(int i=1;i<=K;i++) ret=max(ret,a[i].pos);
  36. // sort(a+ret+1,a+n+1,cmp2);
  37. for(int i=1;i<=ss;i++){
  38. printf("%d ",b[i+ret].id);
  39. }
  40. // for(int i=1;i<=n;i++) if(a[i].tag) printf("%d ",a[i].id);
  41. puts("");
  42. return 0;
  43. }

题解 [CF332C] Students' Revenge的更多相关文章

  1. 【Codeforces 332C】Students' Revenge

    Codeforces 332 C 我爱对拍,对拍使我快乐... 题意:有\(n\)个议题,学生们会让议会同意\(p\)个,其中主席会执行\(k\)个, 每一个议题执行后主席会掉\(a_i\)的头发,不 ...

  2. 题解 GRE Words Revenge

    题目传送门 题目大意 给出 \(m\) 次操作,分别为以下两种操作: 学习一个单词 给出一个段落,查询里面有多少个学过的单词.注意,如果学习过 \(\text{ab,bc}\) ,当前查询段落为 \( ...

  3. HDU P3341 Lost's revenge 题解+数据生成器

    Lost and AekdyCoin are friends. They always play "number game"(A boring game based on numb ...

  4. HDU 3341 Lost's revenge (AC自动机 + DP + 变进制/hash)题解

    题意:给你些分数串,给你一个主串,主串每出现一个分数串加一分,要你重新排列主串,最多几分 思路:显然这里开$40^4$去状压内存不够.但是我们自己想想会发现根本不用开那么大,因为很多状态是废状压,不是 ...

  5. Spring-2-B Save the Students(SPOJ AMR11B)解题报告及测试数据

    Save the Students Time Limit:134MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   Descri ...

  6. HDU 5019 Revenge of GCD(数学)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5019 Problem Description In mathematics, the greatest ...

  7. HDU5088——Revenge of Nim II(高斯消元&矩阵的秩)(BestCoder Round #16)

    Revenge of Nim II Problem DescriptionNim is a mathematical game of strategy in which two players tak ...

  8. 【HDU 4898】 The Revenge of the Princess’ Knight (后缀数组+二分+贪心+...)

    The Revenge of the Princess’ Knight Problem Description There is an old country and the king fell in ...

  9. hdu_4787_GRE Words Revenge(在线AC自动机)

    题目链接:hdu_4787_GRE Words Revenge 题意: 总共有n个操作,2种操作.每行读入一个字符串. 1.如果字符串以+开头,此为单词(即模式串,不考虑重复) 2.如果字符串以?开头 ...

随机推荐

  1. Nginx04---实现直播

    比如树莓派开启一个直播服务如何开启: 百度搜索:搭建自己的直播服务器(nginx + RTMP)

  2. SQL SERVER 字符串函数 STRING_SPLIT()

    定义: STRING_SPLIT()函数根据指定的分隔符将字符串拆分为子字符串行. ※STRING_SPLIT 要求兼容性级别至少为 130. (即SSMS 2016及以上版本) ※级别低于 130 ...

  3. pandas合并excel文件

    现在有多个excel 文件,需要对其进行合并 import pandas as pd path='' list1=[] #save data data=pd.read_excel(path,dtype ...

  4. pymysql连接和操作Mysql数据库

    pymysql 一.概要 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库, 二.PyMySQL 安装 pip install pymysql 三.操作流程 创建c ...

  5. Equations HDU - 1496(哈希的应用)

    Problem Description Consider equations having the following form: a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 a, b ...

  6. jupyter的控件交互

    jupyter实现控件交互 jupyter notebook 是一个交互式IDE 直接上jupyter notebook界面截图

  7. 如何找到程序的真正入口mainCRTStartup

    相信大家都知道以为程序的入口为main函数,但是程序的真正的入口不是main而是mainCRTStartup,那么我们如何找到他的地址呢? 先用第一种方法,就是直接代码显示 #include<s ...

  8. 【bitset】Kth Minimum Clique

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

  9. Grace模式、Saint模式

    一.probe(后端探针) 探测后端,确定他们是否健康,返回的状态用req.backend.healthy核对 backend b1 { .host = "127.0.0.1"; ...

  10. Centos7 部署.net core2.1 详细步骤

    安装dotnet sdk(添加产品秘钥与yum源) 添加yum源:sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages ...