BZOJ1811 [Ioi2005]mea
为什么前几年的IOI题都是这样子的!!!
我们手推一下:
s1 + s2 = 2 * m1, s2 + s3 = 2 * m2, s3 + s4 = 2 * m3...
于是可以用s1, m1, m2, m3...表示出s2, s3, s4...
s2 = 2 * m1 - s1, s3 = 2 * m2 - 2 * m1 + s1, s4 = 2 * m3 - 2 * m2 + 2 * m1 - s1...
由条件si-1 ≤ si可以推出:
s1 ≤ m1, s1 ≥ m1 + (m1 - m2), s1 ≤ m1 + (m1 - m2) - (m2 - m3) ...
不难发现,上面的步骤都是等价的
然后就没有然后了,加个究极读入优化什么的就可以rank排在前面了。
1 /************************************************************** 2 Problem: 1811 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:628 ms 7 Memory:49632 kb 8 ****************************************************************/ 9 10 #include <cstdio> 11 #include <algorithm> 12 13 using namespace std; 14 typedef long long ll; 15 const ll inf = (ll)1e60; 16 const int Maxlen = 5000000 * 10; 17 18 char buf[Maxlen], *c = buf; 19 int Len; 20 int n; 21 ll now, mx, mn; 22 23 int read() { 24 int x = 0; 25 while (*c < '0' || '9' < *c) ++c; 26 while ('0' <= *c && *c <= '9') 27 (x *= 10) += *c - '0', ++c; 28 return x; 29 } 30 31 int main() { 32 Len = fread(c, 1, Maxlen, stdin); 33 buf[Len] = '