首页 NOIP2011初赛

NOIP2011初赛

举报
开通vip

NOIP2011初赛  NOIP2011初赛  提高组 C++  8   hugeint add(hugeint a,hugeint b) //计算大整数a和b 的和 {     int i;     hugeint ans;     memset(ans.num,0,sizeof(ans.num));     if(a.len>b.len)         ans.len=a.len;     else         ans.len=b.len;     for(i=1;i0)         ans.len++;     ret...

NOIP2011初赛
  NOIP2011初赛  提高组 C++  8   hugeint add(hugeint a,hugeint b) //计算大整数a和b 的和 {     int i;     hugeint ans;     memset(ans.num,0,sizeof(ans.num));     if(a.len>b.len)         ans.len=a.len;     else         ans.len=b.len;     for(i=1;i<=ans.len;i++){         ans.num[i]+=         ③       ;          ans.num[i+1]+= ans.num[i]/10;         ans.num[i]%=10;     }     if(ans.num[ans.len+1]>0)         ans.len++;     return ans; }  hugeint average(hugeint a,hugeint b) //计算大整数a和b的平均数的整数部分 {     int i;     hugeint ans;     ans=add(a,b);     for(i=ans.len;i>=2;i--){         ans.num[i-1]+=(     ④      )*10;           ans.num[i]/=2;     }     ans.num[1]/=2;     if(ans.num[ans.len]==0)         ans.len--;     return ans; }  hugeint plustwo(hugeint a) // 计算大整数a加2之后的结果 {     int i;     hugeint ans;     ans=a;   NOIP2011初赛  提高组 C++  9      ans.num[1]+=2;     i=1;     while( (i<=ans.len)&&(ans.num[i]>=10) ){         ans.num[i+1]+=ans.num[i]/10;         ans.num[i]%=10;         i++;     }     if(ans.num[ans.len+1]>0)               ⑤    ;      return ans; }  bool over(hugeint a,hugeint b) // 若大整数a>b则返回true,否则返回false {     int i;     if(      ⑥     )           return false;     if( a.len>b.len )         return true;     for(i=a.len;i>=1;i--){         if(a.num[i]b.num[i])            return true;     }     return false; }  int main() {     string s;     int i;     hugeint target,left,middle,right;     cin>>s;     memset(target.num,0,sizeof(target.num));     target.len=s.length();     for(i=1;i<=target.len;i++)         target.num[i]=s[target.len-i]-      ⑦    ;     memset(left.num,0,sizeof(left.num));     left.len=1;     left.num[1]=1;     right=target;     do{         middle=average(left,right);   NOIP2011初赛  提高组 C++  10          if(over(       ⑧        ))             right=middle;         else             left=middle;     }while(!over(plustwo(left),right) );     for(i=left.len;i>=1;i--)        cout<  using namespace std;  const int SIZE=100+5; const int INFINITY=1000000; int n,a[SIZE],maxDeep,num;  void solve(int left,int right,int deep) { int i,j,min;      if(deep>maxDeep){         maxDeep=deep;         num=1;     }     else if(deep==maxDeep)               ①     ;        min= INFINITY;     for(i=left;i<=right;i++)         if(min>a[i]){             min=a[i];                 ②    ;            }     if(left>n;     for(i=1;i<=n;i++)         cin>>a[i];     maxDeep=0;     solve(1,n,1);     cout<
本文档为【NOIP2011初赛】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
仙人指路888
暂无简介~
格式:doc
大小:14KB
软件:Word
页数:0
分类:初中语文
上传时间:2021-10-23
浏览量:0