GitBook

这里写图片描述

感觉这一题的难点在于……这是道英文题 -.- 然后就是读不懂题目的意思

其实这道题的解法很简单 就是求能让这个一元二次方程取到极值时的整数T的值 ……呃 或者说 求出一个整数T 让取它为值时 函数结果最大 (因为N>0)

方程其实应该这么写 T(C - TN) 等价于 -NT^2+CT

换成 x 或许更好理解…… y=-Nx^2+Cx

所以…… 很简单嘛

还有需要注意的就是 这里要求的是整数T的值 所以需要判断用公式得到的结果是不是整数 如果不是 还需判断它左右两个整数的函数值大小 (还有N==0时 需要输出的是0)

#include<stdio.h>
#include<math.h>
int main() {
	int T;
	int i;
	long long N,C,x;
	scanf("%d",&T);
	for(i=1; i<=T; i++) {
		scanf("%lld %lld",&N,&C);
		if(!N)
			x=0;
		else {
			x=(C/N)/2;
			if(C%(2*N))
				if((C*x-N*x*x)<(C*(x+1)-N*(x+1)*(x+1)))
					x++;
		}
		printf("Case %d: %lld\n",i,x);
	}
	return 0;
}

题目地址:【Light】[1275]Internet Service Providers