P1102 A?B數對
阿新 • • 發佈:2018-10-13
基礎 can main 速度 max 個數字 統計 ons map
刷普及-打基礎系列。。。
我的第一思路是把這個數組排序並去重,順便算出去重後的每個數字在原數字中出現多少次。
發現我不會做。。。
然後其實可以有另一種做法:
把這些值扔進一個map裏面,統計每個值出現的次數。
然後還是排序去重,在數組中挑出唯一的一個\(B\),在map中找出\(A\)和\(B\)出現的次數。所有的這些相乘得到的結果相加就是答案。
附上我感觸很深的一句話:開不了的數組,用map!!!
沒錯呢!map還可以開負數下標的。除了速度有點小慢之外沒什麽大問題。
其實也不慢的。
代碼:
#include<cstdio> #include<algorithm> #include<map> const int maxn = 200005; int a[maxn]; std::map<int,long long> mmp; int n, c; int main() { scanf("%d%d", &n, &c); for(int i = 1; i <= n; i++) { scanf("%d", &a[i]); mmp[a[i]] = mmp[a[i]] + 1; } std::sort(a + 1, a + n + 1); int len = std::unique(a + 1, a + n + 1) - a - 1; long long ans = 0; for(int i = 1; i <= len; i++) { ans += mmp[a[i]] * mmp[a[i] + c]; } printf("%lld\n", ans); return 0; }
P1102 A?B數對