E - Rotation Matching(思维)
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; }