• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LyonLys
愿意在角落唱沙哑的歌 再大声也都是给你 请用心听 不要说话 Contact me via E-mail: lyon.lys@gmail.com
博客园    首页    新随笔    联系   管理    订阅  订阅

poj 1090 Chain

http://poj.org/problem?id=1090

  简单格雷码加大数,最近想先看书,所以有空只是拿这些水题来练练手......

View Code
 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 const int mod = 1000000000;
 5 int ans[40], dg;
 6 bool r[1005];
 7 
 8 void db(bool add){
 9     for (int i = 0; i < dg; i++){
10         ans[i] <<= 1;
11     }
12     if (add){
13         ans[0]++;
14     }
15     for (int i = 0; i < dg; i++){
16         while (ans[i] >= mod){
17             ans[i + 1]++;
18             ans[i] -= mod;
19         }
20     }
21     if (ans[dg]) dg++;
22 }
23 
24 void print(){
25     printf("%d", ans[dg - 1]);
26     for (int i = dg - 2; i >= 0; i--){
27         printf("%09d", ans[i]);
28     }
29 }
30 
31 void deal(int n){
32     dg = 0;
33     memset(ans, 0, sizeof(ans));
34     for (int i = 0; i < n; i++){
35         int a;
36 
37         scanf("%d", &a);
38         r[i] = a ? true : false;
39     }
40     db(r[n - 1]);
41     for (int i = n - 2; i >= 0; i--){
42         r[i] = r[i + 1] ^ r[i];
43         db(r[i]);
44     }
45     print();
46     puts("");
47 }
48 
49 int main(){
50     int n;
51 #ifndef ONLINE_JUDGE
52     freopen("in", "r", stdin);
53 #endif
54     while (~scanf("%d", &n)){
55        deal(n);
56     }
57 
58     return 0;
59 }

 

——written by Lyon

posted @ 2012-09-06 01:16  LyonLys  阅读(222)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3