https://vjudge.net/problem/CodeForces-1313B
思路:最坏情况就构造尽量多的
x
+
y
x+y
x+y,比如可以采用
1
、
x
+
y
−
1
1、x+y-1
1、x+y−1,
2
、
x
+
y
−
2
2、x+y-2
2、x+y−2,……这种方式。那么最多可以得到
m
i
n
(
x
+
y
−
1
,
n
)
min(x+y-1,n)
min(x+y−1,n)个。另外一种情况就有点麻烦,我们假设
x
+
y
<
=
n
x+y<=n
x+y<=n,那么可以采用
1
、
n
1、n
1、n,
2
、
n
−
1
2、n-1
2、n−1,……这种方式,可以让
x
+
y
x+y
x+y排到第一名,但是如果
x
+
y
>
n
x+y>n
x+y>n的话就做不到了,此时采用贪心策略,让前面的采用
1
、
1
1、1
1、1,
2
、
2
2、2
2、2,……这种方式构造,直到第
t
t
t个数开始采用
t
、
n
t、n
t、n,
t
+
1
、
n
−
1
t+1、n-1
t+1、n−1……这种方式,那么就可以计算出
t
t
t的范围从而得到答案。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define pr pair<double,int>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,x,y;
scanf("%d%d%d",&n,&x,&y);
int ans1=min(max(x+y-n+1,1),n);
int ans2=min(x+y-1,n);
printf("%d %d\n",ans1,ans2);
}
return 0;
}