首页 > 其他分享 >破链成环-acwing第131场周赛-奶牛报数

破链成环-acwing第131场周赛-奶牛报数

时间:2024-03-12 18:59:16浏览次数:31  
标签:破链 周赛 arr int 样例 131 区间 奶牛 报数

5364. 奶牛报数 - AcWing题库

有 n 头奶牛,围成一圈,顺时针依次编号为 1∼n。

其中,第 i 头奶牛的重量为 ai。

现在,我们需要选择一头奶牛,并从该奶牛开始,所有奶牛按照顺时针的顺序进行 1∼n报数。

报数完毕后,所有报出的数在 [l,r) 范围内的奶牛,会被选中制作牛肉。

我们希望:

  1. 制作的牛肉尽可能多,即选中的奶牛的重量之和尽可能大。
  2. 在满足上一条件的前提下,1 号奶牛报的数尽可能小。

请你找到满足上述条件的最佳报数方案,并输出该方案下,11 号奶牛报的数。

输入格式

第一行包含整数 n。

第二行包含 n 个整数 a1,a2,…,an。

第三行包含两个整数 l,r。

输出格式

一个整数,表示 11 号奶牛报的数。

数据范围

前 33 个测试点满足 2≤n≤5。
所有测试点满足 2≤n≤105,1≤ai≤104,1≤l<r≤n。

输入样例1:
3
1 2 3
1 3
输出样例1:
3
输入样例2:
5
1 2 3 4 1
1 3
输出样例2:
4

 

首先将原串复制一份拼接到后面,则任意一种报数方案都对应新串上一段长度为 n的区间

然后就是要找到最大最大的区间和,然后反推出1号奶牛报的点数

遍历数组的时候,通过前缀和快速得到区间和,反推1号奶牛报的数,可通过解方程,i-1 为当前区间右端点的位置,r 为当前区间右端点报的数,1号奶牛的位置为1,则可列出方程 1 - y = i - 1 - r , 得 y = r - i ,

就可以每次维护 y ,然后区间值更大时通过y更新答案。

AC code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, arr[200010];
ll s[200010];
int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> arr[i];
		arr[i + n] = arr[i];
	}
	for (int i = 1; i <= n * 2; i++) {
		s[i] = s[i - 1] + arr[i];
	}

	int l = 0, r = 0;
	cin >> l >> r;
	int len = r - l;
	ll ans = LLONG_MIN;
	int in = 1;
	int num = 0;
	for (int i = len ; i <= 2 * n ; i++) {
		ll  res = s[i] - s[i - len];
		int y = r - i;
		while (y < 1) y += n;
		if (res > ans || res == ans && y < num) {
			ans = res;
//			in = i - len ;  in为最大区间左端点 
			num = y;
		}
	}
	cout << num;
}

 

 我最开始的思路是找到最大区间的左端点 in,然后反推 1 号奶牛的报数,但卡了一下午,没想出来,希望有大佬给出思路改正

标签:破链,周赛,arr,int,样例,131,区间,奶牛,报数
From: https://blog.csdn.net/m0_74163986/article/details/136656405

相关文章

  • 牛客周赛 Round 36(A~F)
    A签到直接\(/1000\)输出即可#include<bits/stdc++.h>#defineintlonglong#definerep(i,a,b)for(inti=(a);i<=(b);++i)#definefep(i,a,b)for(inti=(a);i>=(b);--i)#define_for(i,a,b)for(inti=(a);i<(b);++i)#definepiipai......
  • 牛客周赛 Round 36 (小白练习记)
    A.小红的数位删除思路:这题简单输出即可Code:#include<bits/stdc++.h>usingnamespacestd;intmain(){strings;cin>>s;for(inti=0;i<s.size()-3;i++){cout<<s[i];}return0;}B.小红的小红矩阵构造思路:......
  • 131. 分割回文串c
    这题真的坑爹啊,不明白为什么会产生万大小的数据啊。/***Returnanarrayofarraysofsize*returnSize.*Thesizesofthearraysarereturnedas*returnColumnSizesarray.*Note:Bothreturnedarrayand*columnSizesarraymustbemalloced,assumecallerca......
  • 牛客周赛round35
    https://ac.nowcoder.com/acm/contest/76133总结:赛时由于思考问题不清晰(体现在FG),感觉仔细思考一会就不行了,侥幸过了最短路的构造题,写的时候也是不顺利,构造也确实没怎么练过。E题:就是个给你从1出发的最短路的结果,要求你给出图的构造,这种反向题目还真没仔细思考过。此外特殊的......
  • 牛客周赛 Round 35
    牛客周赛Round35比赛链接小红的字符串切割思路一遍循环遍历就可以了,到中间位置时候输出一个换行符Code#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineall(x)x.begin()+1,x.end()#definect(x)cout<<x<<endlvoidsolve(){ strings;......
  • 重庆八中周赛 13
    \[\large\text{Round11:CqbzWeeklyRound13}\]一言:男人从小的时候就是无药可救的。——秋之回忆炸裂的一场,主将中的最低分,组长中的倒二。忏悔啊!\(\text{D:card}\)写这道题没什么别的意义所在,只是为了记录一下回退背包的知识点。这个题目可以非常容易的转化......
  • 重庆八中周赛 12
    \[\large\text{Round9:CqbzWeeklyRound12}\]一言:雨滴降落的速度是每秒十米,我该用怎么样的速度,才能将你挽留?——言叶之庭感觉这场比赛挺有意思的,除了T3的大模拟被某巨佬拉开了差距,其他的题目感觉完成情况都比较正常吧。\(\text{F:middle}\)这是一道可持久化的好......
  • 重庆八中周赛 10
    \[\large\text{Round4:cqbzWeeklyRound10}\]一言:无论你在哪里,就算我看不见你,我也会一直注视着你。——妖精的尾巴\(\text{D:cloud}\)如果把买入和卖出分开处理显然会有一些繁琐,所以我们考虑把他们合在一起,那么买入的利润就是价格的相反数,而卖出就会失去核心。我......
  • 牛客周赛 Round 35
    A.小红的字符串切割思路:拿到了一个长度为偶数的字符串,请你将其切割成长度相等的两部分并输出Code:#include<bits/stdc++.h>usingnamespacestd;intmain(){strings;cin>>s;for(inti=0;i<s.size()/2;i++){cout<<s[i];}c......
  • 牛客周赛 Round 35
    牛客周赛Round35小红的字符串切割代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;typedefdoubledb;#definefifirst#definesesecondusingi128=__int128_t;usingpiii=pair<ll,pair<ll,ll>......