题意:输入一个n,表示在n*n的矩阵中填1~n,使每行每列以及所有正对角线所有反对角线均出现1~n一次。若存在,输出Yes和矩阵,否则输出No;
思路:比赛的时候没思路。将1~n换为0~n较好处理一些。先只考虑0的位置,每行将0向一个方向移动固定格子数,枚举所需的移动步数,
若满足条件(无同行同列同对角线)则Yes,1~n以相同步数移动;否则为No;
#include#include #include using namespace std;int n,m,flag;int pos[5050],pre[5050];int main(){ freopen("avangard.in","r",stdin); freopen("avangard.out","w",stdout); int i,j,k,cnt; while(scanf("%d",&n)!=EOF) { cnt=0; for(i=2;i n) pos[j]-=n; } } } } return 0;}