牛客小白月賽4 J 強迫癥 思維
阿新 • • 發佈:2018-08-24
整數 double 情況 pre .com get font map 說明
鏈接:https://www.nowcoder.com/acm/contest/134/J
來源:牛客網
題目描述
鐵子最近犯上了強迫癥,他總是想要把一個序列裏的元素變得兩兩不同,而他每次可以執行一個這樣的操作,他可以選擇序列裏的任意兩個元素相加,不妨記作ai和aj,然後把ai+aj放進序列裏,再刪掉ai和aj其中的隨便一個,問最少操作多少次可以完成鐵子的願望?輸入描述:
第一行一個整數n表示序列的長度(1≤n≤105
)i
第二行n個整數a
表示序列的每個整數(1≤ai
≤109
)
輸出描述:
輸出一行表示答案示例1
輸入
復制3 1 2 2
輸出
復制1
說明
將序列的第1個整數和序列的第2個整數相加,再刪掉第2個整數。
分析:因為每次操作是在有相同數的情況下合並兩個數,直到最後沒有相同的數,所以我們每次合並的肯定是相同的數,所以直接加上每個數重復的個數-1就好了
AC代碼:
#include <map> #include <set> #include <stack> #include <cmath> #include <queue> #include <cstdio> #include <vector> #include <string> #include <bitset> #include <cstring> #include <iomanip> #include <iostream> #include <algorithm> #define ls (r<<1) #define rs (r<<1|1) #define debug(a) cout << #a << " " << a << endl using namespace std; typedef long long ll; const ll maxn = 1e6+10; const double eps = 1e-8; const ll mod = 1e9 + 7; const int inf = 0x3f3f3f3f; const double pi = acos(-1.0); int main() { ios::sync_with_stdio(0); ll n, ans = 0; cin >> n; map<ll,ll> mp; for( ll i = 0, x; i < n; i ++ ) { cin >> x; mp[x] ++; } for( auto i : mp ) { ans += i.second - 1; } cout << ans << endl; return 0; }
牛客小白月賽4 J 強迫癥 思維