ARC110F

· · 题解

upd:打太快一堆错别字,被讽了...

看楼上同机房大佬扯了一堆结论还有图,实在是看不懂,不如来看小清新理解。

首先你用脑子想一下,你就会知道,如果一直盯着一个位置换,那他最后会换成 0 。因为位置固定,你要交换另一个位置所需要的值也是固定的,而他被换走了,就再也换不到了。

然后你在 0 的前面一直操作,他最后也会变成 0 ,而且他一定会在变成 1 后变成 0 ,因为要和后一位交换。

于是你从前往后一直这样操作,最后就可以将 0 1 换到最前面,而且在换第 0 位的时候,如果你的值是 x ,那他一定会被换到第 x 位。所以后面也是有序的。

然后你就做完了。

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n;
int main()
{
    scanf("%d",&n);
    printf("%d\n",n*n);
    for(int i=n-1;i>=0;i--)
        for(int j=n-1;j>=0;j--)
            printf("%d\n",i);
}