AT arc110F - Esoswap

题目链接

你发现对一个位置操作 \(n - 1\) 次之后,这个位置上一定是 \(0\),因为已经被换出去的一定不会再回来。

你再对它前一个位置操作 \(n - 1\) 次之后,这两个位置一定是 \(0, 1\),因为一定是 \(1\) 换回来的 \(0\)

你再对它们前一个位置操作 \(n - 1\) 次之后,这三个位置一定是 \(0, 1, 2\),……,以此类推。

所以你从 \(n - 1\)\(0\),每个位置都操作 \(n - 1\) 次,一定会得到 \(0, 1, 2, \ldots, n - 1\)

#include<cstdio>
using namespace std;

int n;
int main() {
	scanf("%d",&n);
	printf("%d\n",n*(n-1));
	for(int i=n-1;~i;i--)
		for(int j=1;j<n;j++)
			printf("%d\n",i);
	return 0;
}
posted @ 2026-01-19 19:32  yemuzhe  阅读(2)  评论(0)    收藏  举报