弱校联萌十一大决战之背水一战C. Counting Pair

Bob hosts a party and invites N boys and M girls. He gives every boy here a unique number Ni(1 <= Ni <= N). And for the girl, everyone holds a unique number Mi(1 <= Mi <= M), too.

Now when Bob name a number X, if a boy and a girl wants and their numbers' sum equals to X, they can get in pair and dance.

At this night, Bob will name Q numbers, and wants to know the maxinum pairs could dance in each time. Can you help him?

Input



First line of the input is a single integer T(1 <= T <= 30), indicating there are T test cases.

The first line of each test case contains two numbers N and M(1 <= N,M <= 100000).

The second line contains a single number Q(1 <= Q <= 100000).

Each of the next Q lines contains one number X(0 <= X <= 10^9), indicating the number Bob names.

Output

For each test case, print "Case #t:" first, in which t is the number of the test case starting from 1.

Then for each number Bob names, output a single num in each line, which shows the maxinum pairs that could dance together.

Sample Input

1
4 5
3
1
2
3

Sample Output

Case #1:
0
1
2

Hint

This problem has very large input data. scanf and printf are recommended for C++ I/O.


这个题当时读了好久 学弟看明白才给我讲的orz

他给的Q行数分别是要求的和!但是需要分类讨论 总共也没多麻烦

#include<cstdio>
#include<iostream>
using namespace std;
int t,n,m,p,test;
int main()
{

	scanf("%d",&t);
	for(int cas=1;cas<=t;cas++)
	{
		scanf("%d%d%d",&n,&m,&p);
		printf("Case #%d:\n",cas);
		for(int j=0;j<p;j++)
		{
			scanf("%d",&test);
			if(test-1<=n&&test-1<=m)printf("%d\n",test-1);
			else if(test>n+m) printf("0\n");
			else
			{
			    int maxn1=(test>n?test-1-n:0),maxn2=test>m?test-1-m:0;
			    printf("%d\n",test-1-(maxn1)-(maxn2));
			}
		}
	}
}


你可能感兴趣的:(弱校联萌十一大决战之背水一战C. Counting Pair)