zoukankan      html  css  js  c++  java
  • 【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<0的话,impossible n==m的话,Richman

    【代码】

    #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
    ",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
    ",temp);
    		 		 	}else{
    		 		 	 	printf("%lld
    ",temp+mi-1);
    		 		 	}
    		 		 	break;
    		 		}
    		 	}
    		}
    
    
    
    	}
     	return 0;
    }
    
  • 相关阅读:
    导出数据到Excel文件
    百度地图
    Web报表-RDLC报表的使用
    web开发经验—MVC 图表Chart
    数据库面试题
    滑块插件jRange的使用
    matplotlib绘图使用数据
    JS面向对象之封装
    如何使用Animate.css插件库
    圣杯布局,双飞翼布局
  • 原文地址:https://www.cnblogs.com/AWCXV/p/9920464.html
Copyright © 2011-2022 走看看