列表

详情


NC224679. 比那名居的桃子

描述

小红有一天看到了一只桃子,由于桃子看上去就很好吃,小红很想把它吃掉。
已知吃下桃子后,每天可以获得 a_i 的快乐值,但是每天会获得 b_i 的羞耻度。桃子的持续效果一共为  天。
小红想知道,自己在哪一天吃下果实,可以获得尽可能多的快乐值?

如果有多个答案获得的快乐值相等,小红希望获得尽可能少的羞耻度。
如果有多个答案的快乐值和羞耻度都相等,由于小红实在太想吃桃子了,她希望尽可能早的吃下桃子。

输入描述

第一行有两个正整数  ,分别代表桃子的有效期总天数,以及桃子效果的持续天数。
(桃子的有效期是指,无论桃子在何时服用,桃子的特殊效果只在这段时间之内有效)
第二行有  个正整数 a_i ,分别代表每天可以获得的快乐值。
第三行有 个正整数 b_i ,分别代表每天可以获得的羞耻度。

输出描述

一个正整数,代表小红是第几天吃下桃子的。

示例1

输入:

4 2
3 5 1 7
4 6 5 1

输出:

3

说明:

选择在第三天吃下桃子,可以获得8快乐值和6羞耻度。

原站题解

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

C 解法, 执行用时: 730ms, 内存消耗: 1876K, 提交时间: 2023-03-10 20:04:05

#include<stdio.h>
int main()
{
	long long int n,k,a[100005],b[100005],i,j;
	long long int day,kl=0,xc=0,x,y;
	scanf("%lld %lld",&n,&k);
	for(i=0;i<n;i++)
	scanf("%lld",&a[i]);
	for(i=0;i<n;i++)
	scanf("%lld",&b[i]);
	for(i=0;i<n;i++)
	{
		x=0;
		y=0;
		for(j=i;j<i+k&&j<n;j++)
		{
			x=x+a[j];
			y=y+b[j];
		}
		if(x>kl)
		{
			day=i+1;
			kl=x;
			xc=y;
		}
		else if(x==kl&&y<xc)
		{
			day=i+1;
			xc=y;
		}
	}
	printf("%lld",day);
	return 0;
}

C++(clang++ 11.0.1) 解法, 执行用时: 780ms, 内存消耗: 1908K, 提交时间: 2023-03-13 15:07:09

#include<bits/stdc++.h>
using namespace std;
long long n,k,i,j,a[100010],b[100010];
int main()
{
	long long sum=0,h=1e9,x,y,t=1;
	cin>>n>>k;
	for(i=0;i<n;i++)cin>>a[i];
	for(i=0;i<n;i++)cin>>b[i];
	for(i=0;i<n;i++){
		x=0;y=0;
		for(j=i;j<i+k&&j<n;j++){
			x+=a[j];
			y+=b[j];
		}
		if(x>sum){
			t=i;
			sum=x;
			h=y;
		}
		else if(x==sum&&h>y){
			t=i;
			h=y;
		}
	}
	cout<<t+1;
	return 0;
}

Python3 解法, 执行用时: 350ms, 内存消耗: 36328K, 提交时间: 2022-10-26 13:27:26

n,k = map(int,input().split())
happy = list(map(int,input().split()))
shay = list(map(int,input().split()))
res = []
nowhap,nowshy=sum(happy[:k]),sum(shay[:k])
for i in range(len(happy)-k+1):
    res.append([nowhap,nowshy,i+1])
    if i+k ==n:break
    nowhap=nowhap-happy[i]+happy[i+k]
    nowshy=nowshy-shay[i]+shay[i+k]
res.sort(key=lambda x : -1000000*x[0]+100*x[1])
print(res[0][2])

上一题