专栏文章

题解:P13413 [COCI 2012/2013 #4] OREHNJACA

P13413题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mior3u0q
此快照首次捕获于
2025/12/02 23:46
3 个月前
此快照最后确认于
2025/12/02 23:46
3 个月前
查看原文
通过首尾相减再加上 11,可以得到每个选手期望获得的核桃卷段的长度。使用打擂台可以得到期望获得的核桃卷段的长度最长的观众。
实际获得的核桃卷段的长度可以考虑如下方案实现:
  • 建立一个长度为 LL 的数组 aa,对于 i[1,L]i\in[1,L]aia_i 表示核桃卷段是否已经被拿走。ai=1a_i=1 表示核桃卷段没有被取走,ai=0a_i=0 表示该段已经被拿走。
  • 对于每次输入的 l,rl,r,使用变量 sumsum 记录对于 i[l,r]i\in[l,r] 中的 aia_i 的和。每次取走之后将 aia_i 设为 00
用这种方法可以求出每个观众实际获得的核桃卷段的长度。
代码如下。
CPP
#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long L,n;
	cin>>L>>n;
	int a[L+5],l,r,maxn=0,mn=0,maxa=0,ma=0,sum=0;
	for(long long i=1;i<=L;i++) a[i]=1;
	for(long long i=1;i<=n;i++)
	{
		cin>>l>>r;
		if(maxn<r-l+1)
		{
			maxn=r-l+1;
			mn=i;
		}
		sum=0;
		for(long long j=l;j<=r;j++)
		{
			sum+=a[j];
			a[j]=0;
		}
		if(maxa<sum)
		{
			maxa=sum;
			ma=i;
		}
	}
	cout<<mn<<endl<<ma;
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...