rt,我昨天上课的时候老师要求我们打这一题的性质B,我打出来之后惊奇的发现原本只能拿10分的代码分变成了40分??
#include<bits/stdc++.h>
#define rrg register
#define int __int128
using namespace std;
int n;
char buf[1 << 20],*p1,*p2;
#define getc() getchar()
int read(){int x = 0,w = 1;char cc = getc();if(cc < '0' || cc > '9'){if(cc == '-')w = -1;cc = getc();}while(cc <= '9' && cc >= '0'){x = x * 10 + (cc ^ 48);cc = getc();}return x * w;}
inline void print(int x){if(x < 0){x = -x;putchar('-');}if(x > 9)print(x / 10);putchar(x % 10 + 48);}
struct node{
long long a,b,c;
}vv[200005];
vector<int>g[200005];
int ans;
bool chk(int tme){
for(register int i = 1;i <= n;++i){
if(vv[i].c >= 0){
if(vv[i].b + vv[i].c < 1){
int tmp2 = -(vv[i].b + vv[i].c) / (vv[i].c);
if(tme * tmp2 + vv[i].b + vv[i].c + (vv[i].b + (tme - tmp2) * vv[i].c) * (tme - tmp2) / 2 < vv[i].a)return 0;
}
int tmp = ((vv[i].b + vv[i].c) + (vv[i].b + tme * vv[i].c)) * tme / 2;
if(tmp < vv[i].a)return 0;
}
if(vv[i].c < 0){
if(vv[i].b + vv[i].c < 1)if(tme < vv[i].a)return 0;
int tmp = vv[i].b + vv[i].c;
int tmp2 = vv[i].b + 2 * vv[i].c;
int step = ceil(tmp / 1.0 * (tmp - tmp2));
int tmp3 = (1 + tmp) * step / 2;
if(tmp3 < vv[i].a)return 0;
}
}
return 1;
}
int u,v;
signed main(){
// freopen("tree2.in","r",stdin);
n = read();
for(rrg int i = 1;i <= n;++i){
vv[i].a = read();
vv[i].b = read();
vv[i].c = read();
}
for(rrg int i = 1;i <= n;++i){
u = read();
v = read();
}
int l = n,r = 1e9;
while(l <= r){
int mid = l + r >> 1;
if(chk(mid))ans = mid,r = mid - 1;
else l = mid + 1;
}
print(ans);
return 0;
}