E - Rotation Matching(思维)
思路:由于最多只有轮,根据题意可知,每进行一轮就相当整个序列向左移动一格,如果是第一格就移动到最后一格。
要使轮每个人都不会打重复的对手,显然每一个场地两个人的数字差肯定要不一样。
因此我们构造m对数字差分别为的数字对即可。这样
轮过后才会重复。
所以我们可以将分为两部分,第一部分:
+1, 然后配对
差值分别为
第二部分同理:,然后配对
差值分别为
综上此题就得到解决。
AC代码:(写法1)
#include<cstdio>
using namespace std;
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1,j=m+1;i<j;i++,j--)
printf("%d %d\n",i,j);
for(int i=m+2,j=2*m+1;i<j;i++,j--)
printf("%d %d\n",i,j);
return 0;
} AC代码:(写法2)
#include<cstdio>
using namespace std;
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=(m+1)/2;i++)
printf("%d %d\n",i,m+2-i);
for(int i=1;i<=(m/2);i++)
printf("%d %d\n",m+1+i,2*m+2-i);
return 0;
} 
京公网安备 11010502036488号