首页 > 其他分享 >82 贪心 [NOIP2012 提高组] 国王游戏

82 贪心 [NOIP2012 提高组] 国王游戏

时间:2023-09-09 10:46:02浏览次数:34  
标签:NOIP2012 int -- lt 82 include 贪心

视频链接:

 

Luogu P1080 [NOIP2012 提高组] 国王游戏

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

struct node{
  int a,b;
  bool operator<(node &t){
    return a*b<t.a*t.b;
  }
}p[1005]; //p[]存储每人的手中数
int m[4005],a[4005],t[4005];
int lm,la,lt;
//m[]存储乘积,a[]存储答案,t[]辅助存储

void mul(int m[],int b,int t[]){ //m*b=t
  for(int i=1;i<=lt;i++) t[i]=0;
  for(int i=1;i<=lm;i++) t[i]+=m[i]*b;
  lm+=4; //因为b<10000
  for(int i=1;i<lm;i++){
    t[i+1]+=t[i]/10;  //存进位
    t[i]%=10;         //存余数
  }
  while(t[lm]==0&&lm>1) lm--; //去0
  for(int i=1;i<=lm;i++) m[i]=t[i];
}
void div(int m[],int b,int t[]){ //m/b=t
  for(int i=1;i<=lt;i++) t[i]=0;
  int r=0;
  for(int i=lm;i>=1;i--){
    r=r*10+m[i];  //被除数
    t[i]=r/b;     //存商
    r%=b;         //余数
  }
  lt=lm;
  while(t[lt]==0&&lt>1) lt--; //去0
}
bool cmp(int a[],int t[]){
  if(la!=lt) return la<lt;
  for(int i=lt; i; i--)
    if(a[i]!=t[i]) return a[i]<t[i];
  return false; //相等时返回false
}
void upd(int a[],int t[]){
  if(cmp(a,t)){ //若a<t,更新答案
    for(int i=lt;i;i--) a[i]=t[i];
    la=lt;
  }
}
int main(){
  int n; scanf("%d",&n);
  for(int i=0;i<=n;i++)
    scanf("%d%d",&p[i].a,&p[i].b);
  sort(p+1,p+n+1);
  
  m[++lm]=p[0].a;
  for(int i=1; i<=n; i++){
    div(m,p[i].b,t);
    upd(a,t);
    mul(m,p[i].a,t);
  }
  for(int i=la;i;i--) cout<<a[i];
  return 0;
}

 

标签:NOIP2012,int,--,lt,82,include,贪心
From: https://www.cnblogs.com/dx123/p/17689003.html

相关文章

  • 在CH582的USB代码中启用5、6、7双向端点
      CH582手册中是有标明有8组USB端点的,不过代码中只用了端点0~4,端点5、6、7也是可以使用的。占个坑代码后续更新。......
  • 1826D Running Miles
    题目链接题解知识点:贪心,前缀和,枚举。首先考虑一个贪心结论,选择区间端点一定是两个最大值,因此\(i_1=l,i_3=r\)。考虑变形式子\((b_l+l)+b_{i_2}+(b_r-r)\),那我们枚举\(b_{i_2}\)只需要知道\(\{b_i+i\}\)的前缀最大值,和\(\{b_i-i\}\)的后缀最大值......
  • P8482 Number
    题目传送门思路提供首先我们可以从题目给出的部分分入手,先拿到$50$分,这个我们可以通过贪心的手段保证两个数字的总和相同(因为只要保持相同就可以使得两个数的乘积最大),所以每次将数字加在总分较少的字符串上就可以保证两个字符串表示的数字的乘积最大,如果出现两个两个字符串......
  • CF1829H Don't Blame Me
    比赛链接题解知识点:线性dp,位运算。考虑设\(f_{i,j}\)表示考虑了前\(i\)个数字,与和为\(j\)的方案数。转移方程显然。注意初值为\(f_{0,63}=1\)表示空集,此时注意\(k=6\)时要减去空集这一个方案。当然也可以选择不加入空集,但dp过程需要特别处理只选自己的方案。......
  • 构建全栈安全防护体系,华为云828营销季助力企业打好上云实战
    近年来,云计算等技术蓬勃发展,成为企业数字化转型的重要技术基石。在数据高速增长的同时,数据价值与数据安全问题也在逐步显现。为助力中小企业把好安全关,以“选择华为云,省力更省心”为主题的华为云828营销季带来网站安全、数据灾备、网站高可用等解决方案,为企业筑好数据安全的第一道......
  • Oracle OCP 19c认证考试1Z0-082题库最新解析 第四题
    4.YoucurrentlyhaveanactivetransactioninyoursessionandhavebeengrantedselectaccesstoV$TRANSACTIONInwhichthreesituationswillre-executingthisquerystillreturnarowbutwithadifferentXIDindicatinganewtransactionhasstarted?A.af......
  • “搭载超快闪充、续航自由、天玑8200性能” iQOO Z8系列发布
    近日,“天玑8200性能小超人”iQOOZ8系列正式发布,包括iQOOZ8和iQOOZ8x两款产品,首销售价1199元起。“天玑8200性能小超人”iQOOZ8倾力打造“最佳千元性能机”:搭载具备巅峰性能的天玑8200,携手满血版LPDDR5和满血版UFS3.1组成“满血性能铁三角”,带来千元产品中领先的性能表现......
  • 482. 密钥格式化
    链接https://leetcode.cn/problems/license-key-formatting/description/思路字符串处理,没啥好说的...代码classSolution:deflicenseKeyFormatting(self,s:str,k:int)->str:valid_len,valid_s=self.get_length(s)first_len=valid_len%......
  • 反悔贪心总结
    一.OlympiadinProgrammingandSports-洛谷|计算机科学教育新生态(luogu.com.cn)(1)题意: (2)解题思路考虑按编程能力从大到小排序,先选完编程团队中的p个人,然后再考虑体育团队的s人,考虑维护3个优先队列,一个是a[i]的大根堆,一个是b[i]的大根堆,一个是b[i]-......
  • ESP8266透明串口转MQTT模块使用说明
    ESP8266透明串口转MQTT模块使用说明 更新历史日期撰写备注2023.9.2YTH       目录1    模块功能...22    串口驱动...23    快速验证功能...33.1    模块默认功能:...33.2    手机开启热点.......