博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 6651 Final Exam
阅读量:4493 次
发布时间:2019-06-08

本文共 931 字,大约阅读时间需要 3 分钟。

题意:n个数字未知, 总和为m,问最少怎么填数字,使得必定有k个数比原序列中的大

a: ? ?  ? ?  ?    sum=m

b:b1 b2 b3 b4  b5      count( b [ i ] > a [ i ] ) >=k    (b填数字

 

a是万能视角,能任意采取排数策略,假设a知道b的排列

 

考虑田忌赛马的策略,若a不想让b赢,则至少让k-1个0与b的前k-1大去比,那么b有k-1个符合条件,a只要让b中剩下的(n-(k-1))个数都小于a中剩下的数就好了

即 a中的数最大可取 m / ( n - ( k-1 ) ) +1

反过来只要让b中k-1个数取m / ( n - ( k-1 ) ) +1,为了确保符合条件,剩下一个数最少取 m+1, 其余取0,那么就一定有k个数符合条件

 这样当a取最优策略,k-1个0与b中前k-1大的数去比,b就有k-1个数符合条件,b中剩下的第k小的数一定会比a中某一个数大,即有k个数符合条件

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;typedef pair
P;typedef long double ld;#define mem(x) memset(x, 0, sizeof(x))#define me(x) memset(x, -1, sizeof(x))#define fo(i,n) for(i=0; i
>t; while(t--) { cin>>n>>m>>k; cout<<(1+m/(n-k+1))*(k-1)+m+1<

 

转载于:https://www.cnblogs.com/op-z/p/11342543.html

你可能感兴趣的文章
Codeforces Round #FF (Div. 2) D. DZY Loves Modification 优先队列
查看>>
【学习】logger
查看>>
Delphi APP 開發入門(十)REST Client 開發
查看>>
elk
查看>>
.net 模糊匹配路径
查看>>
用包来组织模型
查看>>
ORA-29857: 表空间中存在域索引和/或次级对象
查看>>
LeetCode58 Length of Last Word
查看>>
Python基础语法 系统学习
查看>>
推荐15款好用的JS开发工具
查看>>
ios开发之数据的持久化存储机制
查看>>
poj 3264
查看>>
图标跟着摄像机(Camera)orthographicSize的值改变大小
查看>>
LeetCode 386——字典序排数
查看>>
Oracle学习笔记之七(用户管理、角色与权限、导入导出等)
查看>>
linux如何挂载windows下的共享文件
查看>>
常用正则表达式
查看>>
C++学习笔记(IV) 之 表达式
查看>>
Houdini 节点参数读取输入节点的数据列表
查看>>
初识Linq to Entity
查看>>