列表

详情


NC230967. 「Nhk R1 D」Apocryphal Vir Pulcher

描述

在最后给出了形式化题意。
WA!GAAY!是一个风靡全球的比赛。成千上万的 Gaays 参加这个 OI 比赛,由于 Gaays 实在是太强了,所以她们都 AK 了。

但是,她们并没有一次成型,反而,她们中的某些 WA 了很多发。每次 WA 掉  题会掉  rating。众所周知,Gaays 中的内卷很严重,扣的分数不是前  小的都会被淘汰。这引起的她们的恐慌,所以她们想知道,第  小的扣分到底会是多少。值得一提的是,没有任何一对 Gaays 在每一题WA的次数都相同。

Gaays 找到了你来帮忙,还说不帮忙就把你也变成 Gaay。请你帮帮她们吧。


形式化题意:给出一个长度为  的序列 。现在可以给出无限组长度为  的序列 

定义两个序列  相等当且仅当 ,有 

对于所有不相等的 ,可以求出一个序列 ,求  中的第  小值。

输入描述

输入共两行。

第一行两个整数表示  和 

第二行输入序列 

输出描述

一行一个整数,表示第  小值。

示例1

输入:

3 5
1 2 3

输出:

3

说明:

最后的 {x_i} 是:1\times0+2\times0+3\times0=0, 1\times1+2\times0+3\times0=1,1\times0+2\times1+3\times0=2,1\times2+2\times0+3\times0=2,1\times1+2\times1+3\times0=3,\dots

取其中第 k=5 小值,即 3

示例2

输入:

3 10
2 3 4

输出:

7

说明:

对于  的数据,

对于另外  的数据,

对于  的数据,1\leqslant a_i\leqslant10^6

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 353ms, 内存消耗: 15692K, 提交时间: 2021-12-30 20:31:39

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

const ll inf=1e9;

int mo=1000000007,st=0;
int n,m,k,f[10000000],no;

int ksm(int a,int b){
	int ret=1;
	for (;b;b/=2,a=1ll*a*a%mo)
		if (b&1) ret=1ll*ret*a%mo;
	return ret;
}
int main(){
	scanf("%d%d",&n,&k);
	int m=4000000;
	f[0]=1;
	for (int i=1;i<=n;i++){
		int x;scanf("%d",&x);
		for (int j=x;j<=m;j++){
			f[j]+=f[j-x];
			if (f[j]>k) f[j]=k;
		}
	}
	for (int i=0;i<=m;i++){
		if (f[i]>=k){
			cout<<i;return 0;
		}
		k-=f[i];
	}
}

上一题