【瞎搞】 HDU 1986 Encoding
给出一个n*m 的框框
然后给你一串字符 由 空格和A-Z 组成
分别表示 0 - 26 的5位 二进制
比如 空格 - 0 - 00000
A - 1 - 00001
。。。。。。。。
然后把这一串字符翻译成二进制串 然后蛇字放进框框里
然后横着输出
#include <cstdio> #include <cstring> #include <cstdlib> #include <string> #include <iostream> #include <algorithm> #include <sstream> #include <cmath> using namespace std; #include <queue> #include <stack> #include <vector> #include <deque> #define cler(arr, val) memset(arr, val, sizeof(arr)) #define FOR(i,a,b) for(int i=a;i<=b;i++) #define IN freopen ("in.txt" , "r" , stdin); #define OUT freopen ("out.txt" , "w" , stdout); typedef long long LL; const int MAXN = 5010; const int MAXM = 6000010; const int INF = 0x3f3f3f3f; const int mod = 1000003; const double eps= 1e-8; #define lson l,m, rt<<1 #define rson m+1,r,rt<<1|1 string mp; char s[55005]; string x[27]; int main() { #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); #endif for(int i=0; i<=26; i++) { stack<int>st; int c=i; for(int j=0; j<5; j++) { int m=c%2; c/=2; st.push('0'+m); } while(!st.empty()) { x[i]+=st.top(); st.pop(); } } //for(int i=0;i<=26;i++) cout<<x[i]<<endl; char s[5555]; int t,n,m,cas=1; scanf("%d",&t); while(t--) { mp.clear(); scanf("%d %d%*c",&n,&m); gets(s); int len=strlen(s); for(int i=0; i<len; i++) { int num; if(s[i]==' ') num=0; else num=s[i]-'A'+1; mp+=x[num]; } // printf("%d\n",mp.length()); while(mp.length()!=n*m) mp+='0'; int vis[22][22]; char num[22][22]; for(int i=0; i<=n+1; i++) for(int j=0; j<=m+1; j++) vis[i][j]=1; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) vis[i][j]=0; int step=0,x=1,y=1,fx=0; vis[x][y]=1; while(1) { num[x][y]=mp[step]; if(step==n*m-1) break; // printf("%d %d\n",x,y); if(fx==0) { if(vis[x][y+1]) { fx=1; continue; } y++; vis[x][y]=1; } else if(fx==1) { if(vis[x+1][y]) { fx=2; continue; } x++; vis[x][y]=1; } else if(fx==2) { if(vis[x][y-1]) { fx=3; continue; } y--; vis[x][y]=1; } else if(fx==3) { if(vis[x-1][y]) { fx=0; continue; } x--; vis[x][y]=1; } step++; } printf("%d ",cas++); for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) printf("%c",num[i][j]); puts(""); } return 0; }