吐槽CCF的数据
查看原帖
吐槽CCF的数据
895690
gghack_Nythix楼主2023/11/19 16:55

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;
}
2023/11/19 16:55
加载中...