Codeforces Round #622 (Div. 2) B. Different Rules(数学)
阅读原文时间:2023年07月08日阅读:2

Codeforces Round #622 (Div. 2) B. Different Rules

题意:

你在参加一个比赛,最终按两场分赛的排名之和排名,每场分赛中不存在名次并列,给出参赛人数 n 和你两场分赛的排名 x, y,问你最终名次最小和最大可能是多少。

思路:

以8人为例:

x + y = 2,最小第一名,最大第一名:

 

 

 

 

 

 

 

1

2

3

4

5

6

7

8

8

7

6

5

4

3

2

1

 

 

 

 

 

 

 

x + y = 3,最小第一名,最大第二名。

 

 

 

 

 

 

1

2

3

4

5

6

7

8

8

7

6

5

4

3

2

1

 

 

 

 

 

 

x + y = n + 1,最小第二名,最大第 n 名。

1

2

3

4

5

6

7

8

8

7

6

5

4

3

2

1

x + y = n + 2,最小第三名,最大第 n 名。

1

2

3

4

5

6

7

8

 

 

8

7

6

5

4

3

2

1

没错,相信聪明的你已经发现规律了:

  • 当 2 ≤ x + y  ≤ n 时,最小值总为第一名,最大值取决于 x + y 比 2 大多少,每大 1 就会对齐一对和为 x + y 的数,即最大名次 + 1。
  • 当 n + 1 ≤ x + y ≤ 2n 时,最大值总为第 n 名,最小值取决于 x + y 比 n + 1 大多少,每大 1 就会错出一对和小于 x + y 的数,即最小名次 + 1。

#include
using namespace std;
void solve(){
int n,x,y;cin>>n>>x>>y;
if(x+y<=n) cout<<1<<' '<>t;
while(t--)
solve();
return 0;
}