Sicily1193

相遇理解为直接穿过。

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

struct person
{
	int f,b;
}p[1005];

bool cmp(struct person a,struct person b)
{
	return a.f<b.f;
}

int main()
{
	int T;
	scanf("%d",&T);
	while (T--)
	{
		int n,f,b;
		int i;
		int total=0;
		scanf("%d%d%d",&n,&f,&b);
		bool zeroflag=true;
		for (i=0;i<n;i++)
		{
			scanf("%d%d",&p[i].f,&p[i].b);
			if (p[i].b)
				zeroflag=false;
		}
		sort(p,p+n,cmp);
		total+=b/n*2*f;
		b%=n;
		if (!b && zeroflag)
		{
			total-=2*f;
			total+=p[n-1].f+f;
			printf("%d\n",total);
			continue;
		}
		else if (!b && !zeroflag)
		{
			for (i=0;i<n;i++)
				if (p[i].b)
					break;
			total+=f-p[i].f;
			printf("%d\n",total);
			continue;
		}
		int counter=0;
		for (i=0;i<n && counter<b;i++)
		{
			if (!p[i].b)
				counter++;
			if (counter==b)
				total+=p[i].f+f;
		}
		for (i=n-1;i>=0 && counter<b;i--)
		{
			if (p[i].b)
				counter++;
			if (counter==b)
				total+=(f-p[i].f)+2*f;
		}
		printf("%d\n",total);
	}
}


你可能感兴趣的:(Sicily1193)