AK杯被虐赛

不多说

给虐就完事了

寄!


 

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define MAXX 1010
int a[MAXX];
int b[MAXX];
void save( int *a, int n)
{
	for ( int i = 1; i <= n; ++i)
	{
		scanf_s("%d", &a[i]);
	}
}
long long mul( int i)
{
	return (1ll * a[i] * b[i] );
}
int main()
{	
	// 先存点数据
	int n;
	int k = 1;
	long long best = 0;
	scanf_s("%d", &n);
	save(a, n);
	save(b, n);
	
	// 检验
	//printf("%ll %ll", a[2], b[2]);
	
	// 开始第一次筛选 选出最大的那个 赋予值为best 注意i从2开始 因为K的初始值为1 占据了i = 1的情况
	for( int i = 2; i <= n; ++i)
	{
		if (mul(i) > mul(k))
		{
			k = i;
		}
		best = mul(k);
		//考虑没有找到的情况【即全是最大值 都卖光了】 为后面判断if做准备
		k = 0;
	}
	
	// 检验
	//printf("%ll", best);
	
	// 开始第二次筛选 

	for (int i = 1; i <= n; ++i)
	{
		
		// 第一个IF用BEST做指标筛掉其他BEST 
		if (mul(i) == best)
			continue;
		
		// 第二个IF用mul(k)做指标找到老二 赋值K 继续顶掉其他小弟
		// 其实这里放一个second之类的会更有可读性 但是没有那么简洁
		// 因为这里的操作都是k = i; 所以放在一起判断了
		// 这同时也利用了截断
	
		// 题解里是一步到位 用第二个IF同时进行了多到菜相同时的筛选 
		// 第一 用abs函数判断|ai - bi|
		// 第二 用++i的有序性巧妙的省去了哪个组合序号最小的判断 K即为最小的序号
	
		// 但是判断K == -1是为了甚么
		
		if (k == -1 || mul(i) > mul(k) || mul(i) == mul(k) && abs(a[i] - b[i]) < abs(a[k] - b[k]))
			k = i;
	}

	if (k)
	{
		printf("%d %lld\n", k, 1ll*a[k]*b[k]);
	}
	else
		printf("sold out\n");
	
	return 0;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值