51Nod 1483 化学变换(思维+暴力)
2017-08-25 11:29
232 查看
51Nod 1483 化学变换
思维题//找出每个数通过乘二除二所能得到的所有的数, //并且记录得到这个数乘二除二的次数和有多少个数能转换为这个数 #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; const int MAXN=200005; const int INF=0x3f3f3f3f; int a[MAXN],vis[MAXN],sp[MAXN]; void handle(int t) { int temp=t; int step=0; //通过这个数乘二得到的所有数 while(temp<=1e5) { vis[temp]++; sp[temp]+=step++; temp<<=1; } step=0; //通过这个数除二得到的所有数 while(t) { //当这个数是奇数时,除2之后还需要向回乘二 if((t&1)&&t!=1) { //先除二 t>>=1; step++; sp[t]+=step; vis[t]++; //向回乘二 int tt=t; int tstep=step; while(tt<=1e5) { tt<<=1; tstep++; vis[tt]++; sp[tt]+=tstep; } } //除二直到遇见奇数 else { t>>=1; step++; sp[t]+=step; vis[t]++; } } } int main(void) { int n; scanf("%d",&n); memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) handle(a[i]); int ans=INF; //遍历所有能由这n个数乘二除二得到的 for(int i=1;i<=MAXN;i++) { if(vis[i]==n) b931 ans=min(ans,sp[i]); } printf("%d\n",ans); return 0; }
相关文章推荐
- 51nod 1483 化学变换(暴力,预处理)
- 51nod 1483 化学变换 | 二进制 暴力
- Codeforce 558C. Amr and Chemistry &51nod 1483 化学变换 By Assassin 暴力大法好
- 51nod--1483--化学变换(思维)
- 51nod 1483 化学变换【思维】
- CodeForces 558 C. Amr and Chemistry && 51NOD 1483 化学变换(暴力 + 贪心)
- 51nod 1483 化学变换(思维)
- 51NOD-1483 化学变换(贪心)
- 51NOD 1483 化学变换
- 51Nod 1483 化学变换
- 1483 化学变换 (思维)
- 51Node 1483----化学变换(暴力枚举)
- 51nod 1483 化学变换
- 51Nod 1483 化学变换
- 51nod 1483 化学变换
- 1483 化学变换(暴力)
- 51nod 1483 化学变换 (枚举+bfs or 枚举+技巧)
- 51Nod - 1483 暴力
- 51nod1483-技巧&标记&思维-化学变换
- 1483 化学变换 乱搞题