BestCoder Round #91【思维】

题目链接:点击打开链接

Lotus and Characters

 
 Accepts: 150
 
 Submissions: 897
 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 262144/131072 K (Java/Others)
问题描述
Lotus有nn种字母,给出每种字母的价值以及每种字母的个数限制,她想构造一个任意长度的串。
定义串的价值为:第1位字母的价值*1+第2位字母的价值*2+第3位字母的价值*3……
求Lotus能构造出的串的最大价值。(可以构造空串,因此答案肯定\geq 00
输入描述
第一行是数据组数T(0 \leq T \leq 1000)T(0T1000)。
对于每组数据,第一行一个整数n(1 \leq n \leq 26)n(1n26),接下来nn行,每行2个整数val_i,cnt_i(|val_i|,cnt_i\leq 100)vali,cnti(vali,cnti100),分别表示第ii种字母的价值和个数限制。
输出描述
对于每组数据,输出一行一个整数,表示答案。
输入样例
2
2
5 1
6 2
3
-5 3
2 1
1 1
输出样例
35
5

又被 hack,~~~自己还是太水

思路:根据排序不等式,显然应该把字母从小往大放。 一种错误的做法是把正权值的字母取出来从前往后放。错误是因为 负权的也可能出现在答案中:放在最前面来使后面每个字母的贡献都增加。 正确的做法是把字母从大往小从后往前放,如果加入该字母后答案变劣就停下来。

注意一下特例:

输入:

3
-1 3
2 1
1 1

输出:

8【最优串为:-1,-1,-1,1,2】


输入:
2
-1 5
4 2

输出:
37 【最优串为:-1,-1,-1,-1,-1,4,4】

#include<iostream>
#include<algorithm>
using namespace std;
int n;
int val[50];
int a[5000];
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		int num=0;
		for(int i=1;i<=n;i++)
		{
			int x;
			scanf("%d%d",&val[i],&x);
			while(x--)
				a[num++]=val[i];
		}
		sort(a,a+num);
		int last=0,ans=0;
		for(int i=num-1;i>=0;i--)
		{
			last+=a[i];
			if(last<0)
				break;
			ans+=last;
		}
		printf("%d\n",ans);
	}
	return 0;
 } 

题目链接:点击打开链接

Lotus and Horticulture

 
 Accepts: 91
 
 Submissions: 641
 Time Limit: 4000/2000 MS (Java/Others)
 
 Memory Limit: 262144/262144 K (Java/Others)
问题描述
这几天Lotus对培养盆栽很感兴趣,于是她想搭建一个温室来满足她的研究欲望。
Lotus将所有的nn株盆栽都放在新建的温室里,所以所有盆栽都处于完全相同的环境中。
每一株盆栽都有一个最佳生长温度区间[l,r][l,r],在这个范围的温度下生长会生长得最好,但是不一定会提供最佳的研究价值(Lotus认为研究发育不良的盆栽也是很有研究价值的)。
Lotus进行了若干次试验,发现若第ii株盆栽的生长温度适宜,可以提供a_iai的研究价值;若生长温度超过了适宜温度的上限,能提供b_ibi的研究价值;若生长温度低于适宜温度的下限,则能提供c_ici的研究价值。
现在通过试验,Lotus已经得知了每一株盆栽的适宜生长温度范围,也知道了它们的aabbcc的值。你需要根据这些信息,给温室选定一个温度(这个温度可以是任意实数),使得Lotus能获得的研究价值最大。
输入描述
多组数据,第一行一个整数TT表示数据组数
每组数据第一行一个整数n\in[1,50000]n[1,50000],表示盆栽数量
接下来nn行每行五个整数l_i,r_i,a_i,b_i,c_i\in[1, 10^9]li,ri,ai,bi,ci[1,109],意义如上所述
输出描述
每组数据输出一行一个整数表示答案
输入样例
1
5
5 8 16 20 12
10 16 3 13 13
8 11 13 1 11
7 9 6 17 5
2 11 20 8 5
输出样例
83

思路:

#include<iostream>
#include<algorithm>
#include<cstring>
#define LL long long
using namespace std;
typedef pair<LL,LL> pll;
LL n,l,r,x1,x2,x3;
pll a[50000*3+10];
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%lld",&n);
		int num=0;
		for(int i=1;i<=n;i++)
		{
			scanf("%lld%lld%lld%lld%lld",&l,&r,&x2,&x3,&x1);
			l<<=1;	r<<=1;
			a[++num]=make_pair(0,x1);
			a[++num]=make_pair(l,x2-x1);
			a[++num]=make_pair(r+1,x3-x2);
		}
		sort(a+1,a+num+1);
		a[0].first=-1;
		LL last=0,ans=0;
		for(int i=1;i<=num;i++)
		{
			if(a[i].first!=a[i-1].first)
				ans=max(ans,last);
			last+=a[i].second;
		}
		printf("%lld\n",max(ans,last)); // 这里为了保险起见,再求一次 max 
	}
	return 0;
}



关于 KFCOI Round #1 的具体资料并未在提供的引用中提及。然而,可以根据 Codeforces 类型的比赛结构以及类似的竞赛经验来推测可能的内容。 ### 参与 KFCOI Round #1 的相关信息 通常情况下,在线编程比赛(如 KFCOI 或 Codeforces)会提供以下资源供参赛者回顾: #### 1. **题目集** 比赛结束后,官方一般会在其官方网站或相关平台上发布完整的题目集合。这些题目可能会附带样例输入输出以便于理解问题的要求[^1]。 #### 2. **题解与思路分析** 官方或者社区成员往往会撰写详细的题解文档,帮助未通过某些难题的选手学习新的算法技巧。例如,在 Codeforces 中,像 A 到 D 题这样的解析是非常常见的。 #### 3. **比赛数据统计** 统计信息包括但不限于每位选手提交次数、正确率等指标。这类数据分析有助于评估个人表现并与他人对比进步空间[^3]。 #### 4. **赛后讨论论坛** 很多平台都设有专门区域让参与者自由交流想法甚至分享错误经历以互相借鉴成长。比如提到过的多次尝试不同方法解决同一道简单题目的过程就是很好的例子。 ### 如何获取上述材料? - 如果您已经注册参加了该赛事,则可以直接登录账户查看存档页面; - 对于公开可用的部分链接地址可以通过搜索引擎查询关键词“KFCOI Round #1 review”找到相关内容; - 加入一些活跃的技术社群也可能获得更多一手资讯和支持。 以下是基于假设场景下的 Python 实现示例用于处理类似 CF 圆整数分解成最小数量正整数组合的问题: ```python def min_sum_representation(n): result = "" current_value = n for digit in range(9, 0, -1): while current_value >= digit: result += str(digit) current_value -= digit return &#39;&#39;.join(sorted(result)) print(min_sum_representation(7)) # 输出:"7" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值