暴力 + 贪心 --- Codeforces 558C : Amr and Chemistry
生活随笔
收集整理的這篇文章主要介紹了
暴力 + 贪心 --- Codeforces 558C : Amr and Chemistry
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?C. Amr and Chemistry
Problem's Link: http://codeforces.com/problemset/problem/558/C
?
Mean:?
給出n個數,讓你通過下面兩種操作,把它們轉換為同一個數。求最少的操作數。
1.ai = ai*2
2.ai = ai/2 (向下取整)
analyse:
基本思路:首先枚舉出每個數能夠到達的數字并且記錄下到達該數組需要的步數,然后從到達次數為n次的數字中選擇步數最小的即為答案。
對于一個數字Ai,它可以變換得到的數字可以分為三類:
1.向左移動n位得到的數字;
2.向右移動n位得到的數字;
3.奇數/2后得到的偶數向右移動n位得到的數字。
?
處理一個數 Ai:
1、對 Ai 執行左移操作,記錄 Ai 通過左移能夠得到的數字,上限為1e5,vis 數組加1,cnt數組記錄步數
2、對 Ai 執行右移操作,直到 Ai 為0.
若 Ai 的最低位為1,右移一步之后,進行左移,上限為1e5,維持vis數組和cnt數組.
若 Ai 的最低位為0,右移一步,維持vis數組和cnt數組.
這樣我們就把一個數的所有情況都處理出來了,并且是最少的操作數.
最后遍歷數組找 vis[i] 為n,并且操作數最小。
?
Time complexity: O(n*m*log(MAX))
?
Source code:?
?
/* * this code is made by crazyacking * Verdict: Accepted * Submission Date: 2015-07-15-18.53 * Time: 0MS * Memory: 137KB */ #include <queue> #include <cstdio> #include <set> #include <string> #include <stack> #include <cmath> #include <climits> #include <map> #include <cstdlib> #include <iostream> #include <vector> #include <algorithm> #include <cstring> #define LL long long #define ULL unsigned long long using namespace std;const int MAXN(10+int(1e5)); int arrive_step[MAXN<<1]; int arrive_num[MAXN<<1]; int a[MAXN],n;void init() {for(int i=0; i<MAXN<<1; ++i) { arrive_step[i]=0,arrive_num[i]=0; } }inline void count_arrive(int &x) {int t=x,step=0;arrive_num[t]++;while(t<=int(1e5)){t<<=1;step++;arrive_step[t]+=step;arrive_num[t]++;}t=x,step=0;while(t>1){if(t!=1 && (t&1)){int sta=t>>1;int sstep=step+1;while(sta<=int(1e5)){sta<<=1;sstep++;arrive_step[sta]+=sstep;arrive_num[sta]++;}}t>>=1;step++;arrive_step[t]+=step;arrive_num[t]++;} }int main() {ios_base::sync_with_stdio(false);cin.tie(0);while(~scanf("%d",&n)){init();for(int i=0; i<n; ++i){scanf("%d",&a[i]);count_arrive(a[i]);}int ans=INT_MAX;for(int i=1; i<(MAXN<<1); ++i){if(arrive_num[i]==n)ans=ans<arrive_step[i]?ans:arrive_step[i];}printf("%d\n",ans);}return 0; } /**/?
總結
以上是生活随笔為你收集整理的暴力 + 贪心 --- Codeforces 558C : Amr and Chemistry的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深js, jsconf China 回顾
- 下一篇: ruby里面的毒瘤