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;
}