70分神秘代码求调QAQ
查看原帖
70分神秘代码求调QAQ
1803593
zhangjunyu_sixi楼主2025/8/29 19:35

这个神秘二分答案测样例时总是少算一个,然后我干脆输出ans+1竟然有70分(逃)

还是想求教一下这个二分答案有啥问题吗

#include <bits/stdc++.h>
using namespace std;
#define int long long
struct wu
{
	int x,y,sm,pm,sv,pv;
};
wu p[105];
signed main()
{
	//freopen("gift.in","r",stdin);
//	freopen("gift.out","w",stdout);
	int n,m,tot=0;
	cin >> n >> m;
	for (int i = 1;i <= n;i++)
	{
		cin >> p[i].x >> p[i].y >> p[i].sm >> p[i].pm >> p[i].sv >> p[i].pv;
		
		//p[i].y%=p[i].x;
	}
	//tot+=minf;
	int l=0,r=100005,mid,ans=0;
	while (l <= r)
	{
		int fz=m,flag=1;
		mid=(l+r)/2;
		for (int i = 1;i <= n;i++)
		{
			if (p[i].pm*1.0/p[i].sm > p[i].pv*1.0/p[i].sv)
			{
				fz-=floor((p[i].x*mid-p[i].y)*1.0/p[i].sv)*p[i].pv;
				fz-=ceil(((p[i].x*mid-p[i].y)-(floor((p[i].x*mid-p[i].y)*1.0/p[i].sv)*p[i].sv))*1.0/p[i].sm)*p[i].pm;
				if (fz < 0)
				{
					r=mid-1;
					flag=0;
					break;
				}
			}
			else
			{
				fz-=ceil((p[i].x*mid-p[i].y)*1.0/p[i].sm)*p[i].pm;
				if (fz < 0)
				{
					r=mid-1;
					flag=0;
					break;
				}
			}
		}
		if (fz < 0)
		{
			r=mid-1;
			flag=0;
		}
		if (flag)
		{
			ans=mid;
			l=mid+1;
		}
	}
	if(ans == 0)
	{
		cout << ans;
	}
	else
	{
		cout << ans+1;//逆天输出·-·
	 } 
	
	return 0;
 } 

PS:while里面那一堆东西是判断大小盒子买哪个划算,如果是大的划算就先买到大的即将溢出为止,转买小的

2025/8/29 19:35
加载中...