51nod 1483 化学变换
2017-08-10 17:57
459 查看
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1483
思路:统计每个所能到达的数和步数,奇数需要特别处理下
哎,模拟能力有待提高
思路:统计每个所能到达的数和步数,奇数需要特别处理下
哎,模拟能力有待提高
#include<cstdio>// 因为范围 2*1e5 枚举每个数能到达的范围,奇数要特别处理一下 #include<queue> #include<iostream> #include<vector> #include<map> #include<cstring> #include<string> #include<set> #include<stack> #include<algorithm> #define cle(a) memset(a,0,sizeof(a)) #define inf(a) memset(a,0x3f,sizeof(a)) #define ll long long #define Rep(i,a,n) for(int i=a;i<=n;i++) using namespace std; const int INF = ( 2e9 ) + 2; const ll maxn = 2e5+10; ll cnt[maxn]; // 总共有多少个数可以到达这个数 ll step[maxn]; // 到达这个数总共需要多少步 void find(int num,int s) { for(int i=2*num;i<=maxn;i*=2,s++) { cnt[i]++; step[i]+=s; } } int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) { int temp; scanf("%d",&temp); int s=0; int flag=1; while(temp) { cnt[temp]++; step[temp]+=s; if(flag) find(temp,s+1); if(temp&1)flag=1; else flag=0; temp/=2; s++; } } int ans=INF; for(int i=1;i<=maxn;i++) if(cnt[i]==n) ans=min(1LL*ans,step[i]); printf("%d\n",ans); }
相关文章推荐
- 51Nod 1483 化学变换
- 51nod--1483--化学变换(思维)
- 51Nod 1483 化学变换(思维+暴力)
- 51nod 1483 化学变换
- 51NOD 1483 化学变换
- 51nod 1483 化学变换【思维】
- 51NOD-1483 化学变换(贪心)
- 51nod 1483 化学变换(思维)
- 51nod 1483 化学变换(暴力,预处理)
- 51nod 1483 化学变换 (枚举+bfs or 枚举+技巧)
- 51Nod 1483 化学变换
- Codeforce 558C. Amr and Chemistry &51nod 1483 化学变换 By Assassin 暴力大法好
- 51nod 1483 化学变换 | 二进制 暴力
- CodeForces 558 C. Amr and Chemistry && 51NOD 1483 化学变换(暴力 + 贪心)
- 51Node 1483----化学变换(暴力枚举)
- 1483 化学变换 (思维)
- nod-1483-化学变换
- 1483 化学变换(暴力)
- 1483 化学变换 乱搞题
- 51nod 1675 序列变换 莫比乌斯反演