Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:这题如果M,N可能很大怎么办?In Reply To:这题如果M,N可能很大怎么办? Posted by:wcfairytale at 2011-10-16 22:51:26 > 题目可没规定数据范围哟 我YY出一个方法来通过(i,j)直接计算字母。不用填充矩阵。 思路是找出(i,j)在第几个环里。还有在这个环的偏移。 #include<iostream> #include<vector> #include<string.h> #include<stdio.h> #include<stack> #include<algorithm> #include<stdlib.h> #include<queue> #include<utility> using namespace std; int N,M; int get_total(int m){ if(m==0) return 0; else return 2*m*(M+N)+4*m - 8*m*(m+1)/2; } int get(int i,int j){ int m = min(i,j); m = min(m,M+1-i); m = min(m,N+1-j); int off = get_total(m-1); int X = M-2*(m-1), Y = N-2*(m-1); int dx = i-m, dy = j-m; if(dx==0) return off+dy+1; if(dy==0) return off+2*(X+Y)-4-dx+1; if(dy==Y-1) return off+Y + dx; return off+Y + Y - dy + X-2; } int main(){ cin>>M>>N; for(int i=1;i<=M;i++){ for(int j=1;j<=N;j++){ printf(" %c",(get(i,j)-1)%26+'A'); } cout<<endl; } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator