[noip2012]国王游戏<贪心+高精度>
题目链接:
https://vijos.org/p/1779
https://www.luogu.org/problem/show?pid=1080
http://codevs.cn/problem/1198/
终于过了。。。。。这道高精度总算是过了,为了这道题我还特意去学了高精度除以搞精度(虽然最后只需要高精度除以低精度)
这道题都是看新番国王游戏的时候突发奇想跑来做的QAQ。。。。
这道题的贪心思路是,按照左右手相乘来从小到大排序,乘积相同就按照右手从小到大。。。
至于为什么这么贪心,我个人的想法是,将右手数大的尽量排后面(除数比较大),然后也要让左手大的靠后(被除数小),
具体的证明可以看看这个博客:http://www.cnblogs.com/OIerLYF/p/7306156.html
然后排了序就是高精度除法,然后和当前的ans来比较,接着高精度乘法。。。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<stack>
#define maxn 10005
using namespace std;
int n;
struct node{
int l,r,sum;
}e[maxn];
int comp(const void*a,const void*b){
if((*(struct node*)a).sum==(*(struct node*)b).sum)
return (*(struct node*)a).r>(*(struct node*)b).r?:-;
return (*(struct node*)a).sum>(*(struct node*)b).sum?:-;
} int ans[maxn],s[maxn],val[maxn]; void div(int s[],int q,int val[])
{
int rest=,tot=,p[maxn];
for(int i=;i<=s[];i++){
p[i]=s[s[]-i+];
}p[]=s[];
rest=p[];int i=;
while(rest<q&&i<=p[]){
rest=rest*+p[i];
i++;
}
if(rest<q){val[]=;val[]=;return ;}
else{
tot++;val[tot]=rest/q;
while(i<=p[]){
rest=rest%q*+p[i];
i++;
tot++;
val[tot]=rest/q;
}
}
val[]=tot;
} void change(){
for(int i=;i<=val[];i++)
ans[i]=val[i];
} void compare(int val[],int ans[]){
if(val[]>ans[]){
change();
}else{
if(val[]==ans[]){
for(int i=;i<=val[];i++){
if(val[i]>ans[i]){
change();
return;
}else return;
}
}
}
} void mul(int s[],int k){
for(int i=;i<=s[];i++){s[i]*=k;}
for(int i=;i<=s[];i++){
if(s[i]>=){
s[i+]+=s[i]/;
s[i]=s[i]%;
}
}
while(s[s[]+]){
s[]++;
s[s[]+]+=s[s[]]/;
s[s[]]%=;
}
} int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%d",&e[i].l,&e[i].r);
e[i].sum=e[i].l*e[i].r;
}
qsort(e+,n,sizeof(e[]),comp);
int k=e[].l,tot=;
while(k){tot++;s[tot]=k%;k/=;}
s[]=tot;
for(int i=;i<=n;i++){
memset(val,,sizeof(val));
div(s,e[i].r,val);
compare(val,ans);
mul(s,e[i].l);
}
for(int i=;i<=ans[];i++)
printf("%d",ans[i]);
}
【总结】
回顾了一下历年的考题,发现高精度其实考的不是很多。。但是这还是挺重要的方法,可以去学学。。
这一份代码中的高精度除以低精度都是我从今年noip2017提高组初赛试题学到的。。另外我顺便还积累了高精度除以高精度,确实很有用。。
然后卡了我很久的错误点就是那个比较环节。。。。比较环节位数相同时,逐位比较,有一位小于等于ans就break,不然就替换。。我就是忘记了跳出,所以一直卡着剩下的40%数据过不了
[noip2012]国王游戏<贪心+高精度>的更多相关文章
- 继续写高精!noip2012国王游戏。。。
国王游戏 题目描述: 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王 ...
- NOIP2012 国王游戏
2国王游戏 (game.cpp/c/pas) [问题描述] 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数 ...
- NOIP2012国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在 ...
- NOIP2012国王游戏(60分题解)
题目描述 恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最前面 ...
- [NOIP2012]国王游戏 题解
题目大意: n个人排成一排,排头固定,其他可以变.每一个人左右手都有一个整数,一个人的分数为他所有前面的人左手上的数的乘积除以他右手上的数(向下取整),求在整列中最大分数的最小值. 思路: 首先,一切 ...
- [NOIp2012] 国王游戏(排序 + 贪心 + 高精度)
题意 给你两个长为 \(n+1\) 的数组 \(a,b\) ,你需要定义一个顺序 \(p\) (\(p_0\) 永远为 \(0\)) 能够最小化 \[ \max_{i=1}^{n} \frac{\pr ...
- 洛谷P1080(NOIP2012)国王游戏——贪心排序与高精度
题目:https://www.luogu.org/problemnew/show/P1080 排序方法的确定,只需任取两个人,通过比较与推导,可以得出ai*bi小的人排在前面: 高精度写的时候犯了些细 ...
- Luogu P1080 [NOIP2012]国王游戏
题目 按\(a_i*b_i\)升序排序即可. 证明考虑交换法. 对于排序后相邻的两个人\(i,j(a_ib_i\le a_jb_j)\),设前面的总的积为\(s\),则当前答案为\(\max(\fra ...
- Luogu 1080 【NOIP2012】国王游戏 (贪心,高精度)
Luogu 1080 [NOIP2012]国王游戏 (贪心,高精度) Description 恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己 ...
随机推荐
- 7-7 jmu_python_是否是数 (10 分)
本题要求从键盘输入一个字符串,判断该串是否属于整数.浮点数或者复数的表示 输入格式: 输入一个字符串 输出格式: 输出yes或no 输入样例: -299 输出样例: yes a = input() t ...
- grid实战之微信钱包 腾讯服务界面
网格布局简介 CSS3网格布局是让开发人员设计一个网格并将内容放在这些网格内.而不是使用浮动制作一个网格,实际上是你将一个元素声明为一个网格容器,并把元素内容置于网格中. 有一些浏览器是不支持网格布局 ...
- 前端劝退预警:JavaScript 工具链不完全指南
经过这么多年的发展,JavaScript 早已经不是当年那个不太起眼的脚本语言.如今的 JavaScript 可以说是风光无限,在 Web 前端.移动端.服务端甚至物联网设备上都大展身手,到处都有它的 ...
- webpack安装问题
在sf进行安装webpack时候,报错如下: 解决方案:npm install webpack-cli -g,如图上
- 简单的编写java的helloWord
那么在上一章章节 http://www.cnblogs.com/langjunnan/p/6814641.html 我们简单的俩了解了一下什么是java和配置编写java的环境,本章呢我们学习如何编写 ...
- 这些MongoDB的隐藏操作你真的都掌握了吗?反正我是刚知道
背景 最近公司系统还原用户时偶尔会出现部分用户信息未还原成功的问题,最为开发人员,最头疼的不是代码存在bug,而是测试发现了bug,但一旦我去重现,它就不见了.Are you kidding me? ...
- C语言实现简单计算器小项目
昨天刚安装上devc++,半夜想着练练C语言吧 于是就看到实验楼有一个计算器的项目 之前做过一次,这次写的主要是思路 首先我们先从原理思考jia,实现简单的计算器就要具备加减乘除这些,看普通的计算器也 ...
- R|tableone 快速绘制文章“表一”-基线特征三线表
首发于“生信补给站” :https://mp.weixin.qq.com/s/LJfgxbTqsp8egnQxEI0nJg 生物医学或其他研究论文中的“表一”多为基线特征的描述性统计.使用R单独进行统 ...
- element中的树形组件,如何获取父级菜单的id
一般多选的树形组件,使用getCheckedNodes()方法只能获取到本级的菜单id,只有在子菜单全部选中的情况下才会选中上级.但我们想要不全选中子级的情况下也要获取它的上级,甚至上上级等,怎么办呢 ...
- python3使用js2py
安装: pip install js2py 使用: 执行js函数: 执行js函数: import js2py js = js2py.EvalJs({}) js.execute("" ...