Description

现在有n+1个人在愉快滴玩游戏~~每个人从0~n编号,并且有a,b两个值。其中编号为0的人必须排在第一个,然后其他人可以任意排。每个人的得分=他前面所有人的a值乘积/他自己的b值向下取整。求,除0号以外,所有人中的分的最大值最小是多少。n<=1000,a,b<=10000。

Solution

很明显就是贪心。关键是策略是什么。
我们设S=∏ni=1aiS=\prod_{i=1}^{n}a_i。考虑排最后的人,他的得分即为⌊Sa∗b⌋\lfloor {S\over a*b}\rfloor,既然我们需要让他的得分尽量小,那么我们就需要把a∗ba*b最大的那一个人放在最后。然后,对于每一段序列我们都可以执行这个操作。这就相当于把每个人按a∗ba*b从小到大排一遍序!
这样问题就得到了完美的解决。注意,答案会很大,要打高精度。

Code

(有点丑)

#include<cstdio>
#include<cstring>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
#define ll long long
using namespace std;
typedef int arr[6005];
struct note{ll a,b,c;
}a[1005];
bool cmp(note x,note y) {return x.c<y.c;
}
int n,bz;
arr sum,ans,t;
char s[5];
void divv(int x){int yu=0;memset(t,0,sizeof(t));fd(i,sum[0],1) {yu=yu*10+sum[i];if (yu>=x) {if (!t[0]) t[0]=i;t[i]=yu/x;yu%=x;}}
}
void mx() {if (t[0]>ans[0]) memcpy(ans,t,sizeof(ans));else if (ans[0]==t[0]) {fd(i,ans[0],1) if (t[i]>ans[i]) {memcpy(ans,t,sizeof(ans));return;} else if (ans[i]<t[i]) return;}
}
void cheng(int x) {arr t;memset(t,0,sizeof(t));fo(i,1,sum[0]) {t[i]=t[i]+sum[i]*x;t[i+1]+=t[i]/10;t[i]%=10;}for(t[0]=sum[0];t[t[0]+1];) t[++t[0]+1]+=t[t[0]]/10,t[t[0]]%=10;memcpy(sum,t,sizeof(sum));
}
int main() {scanf("%d",&n);scanf("%s",s+1);fd(i,strlen(s+1),1) sum[++sum[0]]=s[i]-'0';scanf("%d",&bz);fo(i,1,n) scanf("%lld%lld",&a[i].a,&a[i].b),a[i].c=a[i].a*a[i].b;sort(a+1,a+n+1,cmp);fo(i,1,n) {divv(a[i].b);mx();cheng(a[i].a);}fd(i,ans[0],1) printf("%d",ans[i]);
}

【NOIP2012提高组】国王游戏相关推荐

  1. 洛谷P1080 [NOIP2012 提高组] 国王游戏(贪心,高精度)

    [题目描述] 恰逢HHH国国庆,国王邀请nnn位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这nnn位大臣排成一排,国王站在队伍 ...

  2. [NOIP2012提高组]国王游戏

    题目:洛谷P1080.Vijos P1779.codevs1198. 题目大意:国王和每个大臣左.右手各写了一个数.规定每个大臣得到的金币数为他前面所有人左手的数字的乘积除以他自己右手的数(向下取整) ...

  3. luoguP1080[NOIP2012提高组]国王游戏

    话说要不是标签我都看不出来是个贪心.. 证明一下贪心 XXX的左手为a1a_1a1​,右手为b1b_1b1​. YYY的左手为a2a_2a2​,右手为b2b_2b2​ 假设X位于Y的前边 位于XXX前 ...

  4. 洛谷P1080 [NOIP2012 提高组] 国王游戏

    这是我的第一版,超级简单,但有个点ac不掉,想了半天才发现我理解错那个规律了 struct people{int a,b;bool operator <(const people x) cons ...

  5. [NOIP 2013提高组]转圈游戏 题解

    这题在洛谷上是道黄题,即[普及/提高-] 所以虽然是提高组的,但是其实挺简单的. 我们来看下题面: [NOIP 2013]转圈游戏 刚看到题面作为一个蒟蒻感觉它都不配做黄题,但是直到我看清楚了后发现它 ...

  6. [NOIP2012] 提高组 洛谷P1080 国王游戏

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...

  7. 【NOIP2012 提高组】 国王游戏

    题目: 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最前 ...

  8. 国王游戏 [NOIP2012 提高组]

    国王游戏 题目描述 恰逢 H 国国庆,国王邀请 n位大臣来玩一个有奖游戏. 首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n位大臣排成一排,国王站在 ...

  9. 洛谷 [NOIP2012 D1T2] P1080 国王游戏

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...

  10. 洛谷P1083 [NOIP2012提高组Day2T2]借教室

    P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...

最新文章

  1. 面试问你Spring如何解决循环依赖的时候,不要一脸懵逼了!
  2. Android混合推送,MUI框架-推送配置核心代码-个推推送
  3. Firefox的input缓存
  4. 实战3--设计管理模块,整合!!!
  5. ❤️拿到offer的成长之路与经验感悟分享❤️
  6. 阿里巴巴旗下平台口碑推出无人收银技术,改造便利店市场;重庆法院运用 AI 探索“智能判案”...
  7. 重学数据结构007——二叉查找树
  8. 【Cocos2dX(2.x)_Lua开发之三】
  9. 时间管理—如何充分利用你的24小时
  10. 汉语编程-现存的可能误区及可能方向思考
  11. 如何解决“指定的服务已被标记为删除”错误
  12. oracle中游标详细用法
  13. C语言实现直接插入与直接选择排序,详细
  14. android实现语音聊天功能,为实现Android语音聊天室开发,语音聊天室软件源码该如何搭建...
  15. 【c++ primer5】重点知识总结
  16. 最新县及县以上行政区划代码(截止2014年10月31日)
  17. 2kids学汉字 android,新2Kids学汉字
  18. C语言·百钱百鸡问题
  19. Docker最新超详细教程——基本操作
  20. python中and怎么计算_Python中 and,or 的计算规则

热门文章

  1. 面向对象的三大基本特征和六大基本原则
  2. 【Visual C++】游戏开发五十二 浅墨DirectX教程二十 骨骼动画来袭(一)
  3. 《土地公婆》钟久夫邓天晴演绎梁祝爱情
  4. 关于js的回调函数,同步回调与异步回调
  5. Java第十天:多态 异常处理
  6. SQL查询语句的书写顺序、执行顺序和注意事项
  7. Vs Code配置前端环境及运行
  8. Python读写串口编程
  9. nginx日志格式及自定义日志配置
  10. MegaCli的简易使用(命令总结)