题解 [CF332C] Students' Revenge
解析
辣鸡题面毁我青春
因为翻译的题面中写了一句\(剩下的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:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define fre(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
using namespace std;
inline int read(){
int sum=0,f=1;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return f*sum;
}
const int N=200005;
struct node{int x,y,tag,id,pos;}a[N],b[N];
int n,K,P,sum=0x3f3f3f3f,ret=0;
inline bool cmp(node a,node b){
return a.y!=b.y? a.y<b.y:a.x>b.x;
}
inline bool cmp1(node a,node b){
// if(a.tag!=b.tag) return a.tag<b.tag;
if(a.x!=b.x) return a.x>b.x;
return a.y>b.y;
}
inline bool cmp2(node a,node b){return a.y!=b.y? a.y>b.y:a.x<b.x;}
signed main(){
n=read();P=read();K=read();
for(int i=1;i<=n;i++) a[i].x=read(),a[i].y=read();
for(int i=1;i<=n;i++) a[i].id=i;
sort(a+1,a+n+1,cmp2);
memcpy(b,a,sizeof(b));
for(int i=1;i<=n;i++) a[i].pos=i;
int ss=P-K;
sort(a+1,a+n-ss+1,cmp1);
for(int i=1;i<=K;i++) printf("%d ",a[i].id);
for(int i=1;i<=K;i++) ret=max(ret,a[i].pos);
// sort(a+ret+1,a+n+1,cmp2);
for(int i=1;i<=ss;i++){
printf("%d ",b[i+ret].id);
}
// for(int i=1;i<=n;i++) if(a[i].tag) printf("%d ",a[i].id);
puts("");
return 0;
}
题解 [CF332C] Students' Revenge的更多相关文章
- 【Codeforces 332C】Students' Revenge
Codeforces 332 C 我爱对拍,对拍使我快乐... 题意:有\(n\)个议题,学生们会让议会同意\(p\)个,其中主席会执行\(k\)个, 每一个议题执行后主席会掉\(a_i\)的头发,不 ...
- 题解 GRE Words Revenge
题目传送门 题目大意 给出 \(m\) 次操作,分别为以下两种操作: 学习一个单词 给出一个段落,查询里面有多少个学过的单词.注意,如果学习过 \(\text{ab,bc}\) ,当前查询段落为 \( ...
- HDU P3341 Lost's revenge 题解+数据生成器
Lost and AekdyCoin are friends. They always play "number game"(A boring game based on numb ...
- HDU 3341 Lost's revenge (AC自动机 + DP + 变进制/hash)题解
题意:给你些分数串,给你一个主串,主串每出现一个分数串加一分,要你重新排列主串,最多几分 思路:显然这里开$40^4$去状压内存不够.但是我们自己想想会发现根本不用开那么大,因为很多状态是废状压,不是 ...
- Spring-2-B Save the Students(SPOJ AMR11B)解题报告及测试数据
Save the Students Time Limit:134MS Memory Limit:0KB 64bit IO Format:%lld & %llu Descri ...
- HDU 5019 Revenge of GCD(数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5019 Problem Description In mathematics, the greatest ...
- 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 ...
- 【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 ...
- hdu_4787_GRE Words Revenge(在线AC自动机)
题目链接:hdu_4787_GRE Words Revenge 题意: 总共有n个操作,2种操作.每行读入一个字符串. 1.如果字符串以+开头,此为单词(即模式串,不考虑重复) 2.如果字符串以?开头 ...
随机推荐
- Nginx04---实现直播
比如树莓派开启一个直播服务如何开启: 百度搜索:搭建自己的直播服务器(nginx + RTMP)
- SQL SERVER 字符串函数 STRING_SPLIT()
定义: STRING_SPLIT()函数根据指定的分隔符将字符串拆分为子字符串行. ※STRING_SPLIT 要求兼容性级别至少为 130. (即SSMS 2016及以上版本) ※级别低于 130 ...
- pandas合并excel文件
现在有多个excel 文件,需要对其进行合并 import pandas as pd path='' list1=[] #save data data=pd.read_excel(path,dtype ...
- pymysql连接和操作Mysql数据库
pymysql 一.概要 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库, 二.PyMySQL 安装 pip install pymysql 三.操作流程 创建c ...
- 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 ...
- jupyter的控件交互
jupyter实现控件交互 jupyter notebook 是一个交互式IDE 直接上jupyter notebook界面截图
- 如何找到程序的真正入口mainCRTStartup
相信大家都知道以为程序的入口为main函数,但是程序的真正的入口不是main而是mainCRTStartup,那么我们如何找到他的地址呢? 先用第一种方法,就是直接代码显示 #include<s ...
- 【bitset】Kth Minimum Clique
#include<bits/stdc++.h> #define B bitset<105> using namespace std; typedef long long ll ...
- Grace模式、Saint模式
一.probe(后端探针) 探测后端,确定他们是否健康,返回的状态用req.backend.healthy核对 backend b1 { .host = "127.0.0.1"; ...
- Centos7 部署.net core2.1 详细步骤
安装dotnet sdk(添加产品秘钥与yum源) 添加yum源:sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages ...