【noip】国王游戏 贪心 高精度

2024-06-04 22:32

本文主要是介绍【noip】国王游戏 贪心 高精度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说实话我一开始是不想发这道题的,虽然比较水,但不知道是不是因为我太久都没有写高精度了,还是写错了,才40分,还是发上来吧。

描述

恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这n位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。
国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。
格式

输入格式

第一行包含一个整数n,表示大臣的人数。
第二行包含两个整数a和b,之间用一个空格隔开,分别表示国王左手和右手上的整数。接下来n行,每行包含两个整数a和b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。

输出格式

输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。

样例

样例输入

3
1 1
2 3
7 4
4 6

样例输出

2

限制

每个测试点1s

提示

对于20%的数据,有1≤ n≤ 10,0 < a、b < 8;
对于40%的数据,有1≤ n≤20,0 < a、b < 8;
对于60%的数据,有1≤ n≤100;
对于60%的数据,保证答案不超过10^9;
对于100%的数据,有1 ≤ n ≤1,000,0 < a、b < 10000。

来源

Noip2012提高组复赛Day1T2

这道题没什么说的,就是以来可以看出是贪心,但是不好直接看出贪心的正确性,这里就简单地说一下。
首先我们贪心很简单,就是直接按照左右手的乘积由小到大排序,最后的人左右手成绩最大
我们可以这样来考虑:现在一共有x人等着我们排序我们设所有人的左手乘积 mulit(x)=xi=1left(i) 那么最后一个人的值就是 mulit(x)left(x)right(x) 所以我们就直接按照成绩来排序就可以了
然后mulit(x)用高精度算就可以了,没什么好多说的了,直接放代码了
代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#define M 10005using namespace std;struct hp
{int n[M]; 
}mul,mx;struct person
{int a,b,mu;
}p[M];bool com(const person &a,const person &b)
{return a.mu<b.mu;
}bool cmp(hp a,hp b)
{if(a.n[0]>b.n[0])return 1;for(int i=a.n[0];i>=1;i--){if(a.n[i]>b.n[i])return 1;if(b.n[i]>a.n[i])return 0;}return 0;
}void mulit(hp &a,int b)
{for(int i=1;i<=a.n[0];i++)a.n[i]*=b;for(int i=1;i<=a.n[0]-1;i++){a.n[i+1]+=a.n[i]/10;a.n[i]%=10;}while(a.n[a.n[0]]>=10){a.n[a.n[0]+1]=a.n[a.n[0]]/10;a.n[a.n[0]]%=10;a.n[0]++;}
}hp chu(hp a,int b)
{for(int i=a.n[0];i>=1;i--){if(i!=1)a.n[i-1]+=(a.n[i]%b)*10;a.n[i]/=b;}while(a.n[a.n[0]]==0)a.n[0]--;return a;
}int n;int main()
{freopen("game.in","r",stdin);freopen("game.out","w",stdout);cin>>n;int a,b;cin>>a>>b;mul.n[0]=1;mul.n[1]=a;for(int i=1;i<=n;i++){scanf("%d%d",&p[i].a,&p[i].b);p[i].mu=p[i].a*p[i].b;}sort(p+1,p+1+n,com);for(int i=1;i<=n;i++){hp temp=chu(mul,p[i].b);if(cmp(temp,mx))mx=temp;mulit(mul,p[i].a);}for(int i=mx.n[0];i>=1;i--)printf("%d",mx.n[i]);return 0;
}

大概就是这个样子,如果有什么问题,或错误,请在评论区提出,谢谢。

这篇关于【noip】国王游戏 贪心 高精度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1031304

相关文章

usaco 1.3 Barn Repair(贪心)

思路:用上M块木板时有 M-1 个间隙。目标是让总间隙最大。将相邻两个有牛的牛棚之间间隔的牛棚数排序,选取最大的M-1个作为间隙,其余地方用木板盖住。 做法: 1.若,板(M) 的数目大于或等于 牛棚中有牛的数目(C),则 目测 给每个牛牛发一个板就为最小的需求~ 2.否则,先对 牛牛们的门牌号排序,然后 用一个数组 blank[ ] 记录两门牌号之间的距离,然后 用数组 an

poj 3190 优先队列+贪心

题意: 有n头牛,分别给他们挤奶的时间。 然后每头牛挤奶的时候都要在一个stall里面,并且每个stall每次只能占用一头牛。 问最少需要多少个stall,并输出每头牛所在的stall。 e.g 样例: INPUT: 51 102 43 65 84 7 OUTPUT: 412324 HINT: Explanation of the s

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

POJ2010 贪心优先队列

c头牛,需要选n头(奇数);学校总共有f的资金, 每头牛分数score和学费cost,问合法招生方案中,中间分数(即排名第(n+1)/2)最高的是多少。 n头牛按照先score后cost从小到大排序; 枚举中间score的牛,  预处理左边与右边的最小花费和。 预处理直接优先队列贪心 public class Main {public static voi

ural 1820. Ural Steaks 贪心

1820. Ural Steaks Time limit: 0.5 second Memory limit: 64 MB After the personal contest, happy but hungry programmers dropped into the restaurant “Ural Steaks” and ordered  n specialty steaks

ural 1014. Product of Digits贪心

1014. Product of Digits Time limit: 1.0 second Memory limit: 64 MB Your task is to find the minimal positive integer number  Q so that the product of digits of  Q is exactly equal to  N. Inpu

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI