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?
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.
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.
1
4 5
3
1
2
3
Case #1:
0
1
2
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)); } } } }