link:http://codeforces.com/contest/334/problem/A
很有意思的一道构造题。发现CF上经常出这种不难但是很不错的构造题。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <cctype> 7 #include <algorithm> 8 #include <queue> 9 #include <deque> 10 #include <queue> 11 #include <list> 12 #include <map> 13 #include <set> 14 #include <vector> 15 #include <utility> 16 #include <functional> 17 #include <fstream> 18 #include <iomanip> 19 #include <sstream> 20 #include <numeric> 21 #include <cassert> 22 #include <ctime> 23 #include <iterator> 24 const int INF = 0x3f3f3f3f; 25 const int dir[8][2] = {{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}}; 26 using namespace std; 27 int main(void) 28 { 29 int n; 30 while (~scanf("%d",&n)) 31 for (int i=1;i<=n*n/2;++i) 32 { 33 for (int j=1;j<=n/2;++j) 34 { 35 printf("%d %d ",i,n*n-i+1); 36 ++i; 37 } 38 i--; 39 printf(" "); 40 } 41 return 0; 42 }
o(╯□╰)o
官方解题报告上面写的很明白
1 n^2
2 n^2-1
.. ..
n^2/2 n^2/2+1
然后这就是n^2/2组,每一组的和都相同。n^2/2/(n/2) = n组,所以我们只需要从这n^2/2组里面选择n/2组就满足了一个解,这样,恰好可以选出n组来。