NWERC2016F - Free Weights
题目大意
自己看题吧,懒得写。。
简要题解
二分然后判断
#include <bits/stdc++.h> using namespace std; namespace my_header { #define pb push_back #define mp make_pair #define pir pair<int, int> #define vec vector<int> #define pc putchar #define clr(t) memset(t, 0, sizeof t) #define pse(t, v) memset(t, v, sizeof t) #define bl puts("") #define wn(x) wr(x), bl #define ws(x) wr(x), pc(' ') const int INF = 0x3f3f3f3f; typedef long long LL; typedef double DB; inline char gchar() { char ret = getchar(); for(; (ret == '\n' || ret == '\r' || ret == ' ') && ret != EOF; ret = getchar()); return ret; } template<class T> inline void fr(T &ret, char c = ' ', int flg = 1) { for(c = getchar(); (c < '0' || '9' < c) && c != '-'; c = getchar()); if (c == '-') { flg = -1; c = getchar(); } for(ret = 0; '0' <= c && c <= '9'; c = getchar()) ret = ret * 10 + c - '0'; ret = ret * flg; } inline int fr() { int t; fr(t); return t; } template<class T> inline void fr(T&a, T&b) { fr(a), fr(b); } template<class T> inline void fr(T&a, T&b, T&c) { fr(a), fr(b), fr(c); } template<class T> inline char wr(T a, int b = 10, bool p = 1) { return a < 0 ? pc('-'), wr(-a, b, 0) : (a == 0 ? (p ? pc('0') : p) : (wr(a/b, b, 0), pc('0' + a % b))); } template<class T> inline void wt(T a) { wn(a); } template<class T> inline void wt(T a, T b) { ws(a), wn(b); } template<class T> inline void wt(T a, T b, T c) { ws(a), ws(b), wn(c); } template<class T> inline void wt(T a, T b, T c, T d) { ws(a), ws(b), ws(c), wn(d); } template<class T> inline T gcd(T a, T b) { return b == 0 ? a : gcd(b, a % b); } template<class T> inline T fpw(T b, T i, T _m, T r = 1) { for(; i; i >>= 1, b = b * b % _m) if(i & 1) r = r * b % _m; return r; } }; using namespace my_header; const int MAXN = 1e6 + 100; int a[MAXN], b[MAXN]; int n; bool ok(int p) { int lsv = 0; for (int i = 1; i <= n; ++i) { if (a[i] > p) { if (lsv != 0) { if (lsv != a[i]) return false; lsv = 0; } else lsv = a[i]; } } if (lsv != 0) return false; lsv = 0; for (int i = 1; i <= n; ++i) { if (b[i] > p) { if (lsv != 0) { if (lsv != b[i]) return false; lsv = 0; } else lsv = b[i]; } } return lsv == 0; } int main() { #ifdef lol freopen("F.in", "r", stdin); freopen("F.out", "w", stdout); #endif fr(n); for (int i = 1; i <= n; ++i) scanf("%d", &a[i]); for (int i = 1; i <= n; ++i) scanf("%d", &b[i]); int l = 0, r = 1e9 + 10; while (l < r) { int m = (l + r) >> 1; if (ok(m)) r = m; else l = m + 1; } printf("%d\n", l); return 0; }