【ZOJ 4067】Books
【链接】  我是链接,点我呀:) 
 【题意】
【题解】
统计a中0的个数cnt0
然后m减去cnt0
因为这cnt0个0是一定会取到的。
如果m==0了
那么直接找到数组中的最小值mi
输出mi-1就好
否则
找到剩余的前m个非0的数字
设第m个非0数字为a[i],则在i+1..n中再取最小值mi
则输出前m个非0数字和+mi-1
m
【代码】
#include <bits/stdc++.h>
#define ll long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
using namespace std;
const int N = 1e5;
int n,m,cnt0;
int a[N+10];
int main(){
	#ifdef ccy
			freopen("rush.txt","r",stdin);
	#endif
	int T;
	scanf("%d",&T);
	while (T--){
		cnt0=0;
	 	scanf("%d%d",&n,&m);
	 	for (int i = 1;i <=  n;i++) scanf("%d",&a[i]);
	 	rep1(i,1,n) if (a[i]==0) cnt0++;
	 	if (m==n){
	 	 	puts("Richman");
	 	 	continue;
	 	}
	 	if (m<cnt0){
	 	 	puts("Impossible");
	 	 	continue;
	 	}
		m-=cnt0;
		int mi = 1e9+7;
		rep1(i,1,n){
		 	if (a[i]<mi && a[i]!=0){
		 	 	mi = a[i];
		 	}
		}
		if (m==0){
		 	printf("%d\n",mi-1);
		 	continue;
		}
		ll temp = 0;
		rep1(i,1,n){
		 	if (a[i]!=0){
		 		temp +=a[i];
		 		m--;
		 		if (m==0){
		 			int mi = 1e9+7;
		 		 	rep1(j,i+1,n)
		 		 		if (a[j]!=0 && a[j]<mi){
		 		 		 	mi = a[j];
		 		 		}
		 		 	if (mi>1e9){
		 		 	 	printf("%lld\n",temp);
		 		 	}else{
		 		 	 	printf("%lld\n",temp+mi-1);
		 		 	}
		 		 	break;
		 		}
		 	}
		}
	}
 	return 0;
}
												
											【ZOJ 4067】Books的更多相关文章
- 【ZOJ 4070】Function and Function
		
[链接] 我是链接,点我呀:) [题意] [题解] 递归一会. 会发现最后肯定是0,1一直循环. 开始循环之后就直接返回结果就好. [代码] #include <bits/stdc++.h> ...
 - 【ZOJ 4060】Flippy Sequence
		
[链接] 我是链接,点我呀:) [题意] [题解] 按照两个区间的排列方式 我们可以分成以下几种情况 会发现这两个区间的作用 最多只能把两段连续不同的区间变为相同. 那么写个for处理出连续不相同的一 ...
 - 【ZOJ 4062】Plants vs. Zombies
		
[链接] 我是链接,点我呀:) [题意] [题解] 二分最后的最大抵御值mid. 然后对于每个蘑菇. 都能算出来它要浇水几次mid/ai 然后如果第i个蘑菇没浇水达到要求次数. 就在i和i+1之间来回 ...
 - 【Zoj 4061】Magic Multiplication
		
[链接] 我是链接,点我呀:) [题意] [题解] /* for a[1] from 1~9 1*1=1 2*1=2 3*1=3 1*2=2 2*2=4 3*2=6 1*3=3 2*3=6 3*3=9 ...
 - 【ZOJ 3200】Police and Thief
		
ZOJ 3200 首先我写了个高斯消元,但是消出来了一些奇怪的东西,我就放弃了... 然后只好考虑dp:\(dp[i][j][k]\)表示走到了第i步,到了\((j,k)\)这个节点的概率. 那么答案 ...
 - 【ZOJ 3463】Piano
		
ZOJ 3463 题意:有一个钢琴,一个人把左手放在L位置上,右手放在R位置上,要弹某\(n\)个键,每个手最多能够得着9个位置,并且两只手不能交叉.把手移动的代价是大拇指移动的距离的平方根.问弹完这 ...
 - 【ZOJ 3929】Deque and Balls(普通dp)
		
题意:给出一个序列,按照顺序一个一个放入双端队列(可以放在头部也可以放在尾部),一个队列的美丽指数就是数列中a[i]>a[i+1]的个数,求美丽指数的期望*2^n的值. 解题思路:方便起见,我们 ...
 - 【ZOJ 3844】Easy Task
		
题意 每次把序列中最大的数a的一个和最小的数b的一个变成a-b.求最后是否能使序列里的数全部相同,能则输出这个相同的数. 分析 一定是有解的,不断减少最大数的个数,最大数减少为0个时,就是减少了不同数 ...
 - 【ZOJ 3870】 Team Formation
		
题意 n个数,找出有几对a.b 符合 a ^ b > max(a,b) .^表示异或号 分析 对于数a,如果它的二进制是: 1 0 1 0 0 1,那么和它 ^ 后 能比他大的数就是: 0 1 ...
 
随机推荐
- Linux(redhat 5.8)下 安装jetty   部署   使用
			
首先须要安装JDK,自行解决 下载jetty安装包http://dist.codehaus.org/jetty/ 我下载的是8.1.15 tar -xzvf *.tar.gz 解压完之后,基本就能够用 ...
 - How to do IF NOT EXISTS in SQLite
			
http://stackoverflow.com/questions/531035/how-to-do-if-not-exists-in-sqlite How about this? INSERT O ...
 - (转)dp动态规划分类详解
			
dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...
 - C# WINFORM 局域网PING 工具(技术改变世界-cnblog)
			
WINFORM 局域网PING 工具(技术改变世界-cnblog) 需求: 1.实时更新 日期时间 2.可以ping多个IP 地址,必须判断 IP地址的正确性,不能为广播地址 3.对ping结果的显示 ...
 - 比较两个map里的数据
			
template <class DataType>void ProcessMap(std::map<std::string, std::vector<DataType> ...
 - Django day08 多表操作 (三) 基于对象的跨表查询  基于双下划线的多表查询
			
一: 基于对象的跨表查询 1. 一对一 正向: 反向: 2. 一对多 正向: 反向: 3.多对多 正向: 反向: 4.*****基于对象的多表查询 二: 基于双下划线的多表查询 1. 连表查询 一对一 ...
 - 关于sklearn中的导包交叉验证问题
			
机器学习sklearn中的检查验证模块: 原版本导包: from sklearn.cross_validation import cross_val_score 导包报错: 模块继承在cross_va ...
 - [Swift]LeetCode1064. 不动点 | Fixed Point
			
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
 - MemcachedClient 使用说明
			
上一篇介绍了Memcached基本使用方法<Memcached使用手册>,下面介绍java如何操作memcached.使用的是java_memcached-release_2.6.6. 一 ...
 - Spring JPA 简单配置使用
			
JPA 常用配置: # JPA (JpaBaseConfiguration, HibernateJpaAutoConfiguration) spring.data.jpa.repositories.b ...