考試模擬1 BestCoder Round #3 BestCoder Sequence
阿新 • • 發佈:2018-12-04
這個題目的難點,就是如何對應一個數兩邊的數一個大一個小,想了很久想來想去,自己也不知道怎麼解決,想到邊遍歷邊記錄個數,可能要判斷奇數偶數之類的,看了網上的題解,只是覺得不能再巧妙,程式碼很好理解,可是方法也好體會,可是這種巧妙很難運用= =!!
參考其他部落格
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define repf(i,a,b) for(int i=(a);i<=(b);i++) typedef long long ll; const int N = 4e4+10; int a[N], rec[N<<1]; int n, m, pos, cnt; ll ans; int main() { while (~scanf("%d%d", &n, &m)) { memset(rec, 0, sizeof(rec)); repf (i, 0, n - 1) { scanf("%d", &a[i]); if (a[i] == m) { pos = i; } } cnt = 0; for (int i = pos; i >= 0; i--) { if (a[i] > m) cnt++; if (a[i] < m) cnt--; rec[N + cnt]++; } cnt = 0; ans = 0; for (int i = pos; i < n; i++) { if (a[i] > m) cnt++; if (a[i] < m) cnt--; ans += rec[N - cnt]; } cout << ans << endl; } return 0; }
順便說下1001,最大流問題,大概是個模板題吧,怪不得我連題意都沒看懂,通過率還這麼高,嗯,就這樣吧!