码迷,mamicode.com
首页 > 其他好文 > 详细

SRM补题计划

时间:2017-10-18 02:13:36      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:++   blog   运算   return   getchar   log   数字   amp   ios   

退役选手没事干也就只能补补题了。。。

SRM 01 (这场没打QAQ)

A.Amusing 

一个数组后面每次放个1,如果等于前一个数a就合并到前一个数变成a+1

模拟很好写。。

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <queue>
 6 #include <stack>
 7 #include <cmath>
 8 #define out(a) printf("%d ",a)
 9 #define ll long long
10 using namespace std;
11 int n,num=0;
12 int cnt=0;
13 bool f;
14 int a[100050];
15 int read()
16 {
17     int s=0,t=1; char c;
18     while (c<0||c>9){if (c==-) t=-1; c=getchar();}
19     while (c>=0&&c<=9){s=s*10+c-0; c=getchar();}
20     return s*t;
21 }
22 int main()
23 {
24     n=read();  
25     for (int i=1;i<=n;i++) {
26         a[++cnt]=1;
27       while (a[cnt]==a[cnt-1]) {
28           a[cnt-1]++; cnt--;
29       }
30   }
31   for (int i=1;i<=cnt;i++)
32     out(a[i]);
33 }
34       
35         
36       
View Code

看着zz的代码看了好久发现是有一个规律可以用二进制来写。

规律就是n的二进制下等于1的数字位置。所以可以直接用位运算&

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <queue>
 6 #include <stack>
 7 #include <cmath>
 8 #define out(a) printf("%d ",a)
 9 #define ll long long
10 using namespace std;
11 int n,num=0;
12 int cnt=0;
13 bool f;
14 int a[100050];
15 int read()
16 {
17     int s=0,t=1; char c;
18     while (c<0||c>9){if (c==-) t=-1; c=getchar();}
19     while (c>=0&&c<=9){s=s*10+c-0; c=getchar();}
20     return s*t;
21 }
22 int main()
23 {
24     n=read();  
25     for (int i=23;i>=0;i--) 
26       if ((n&(1<<i))>0) out(i+1);
27     return 0;
28 }
29       
30         
31       
View Code

......

 

SRM补题计划

标签:++   blog   运算   return   getchar   log   数字   amp   ios   

原文地址:http://www.cnblogs.com/Watton/p/7684685.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!