【瞎搞】 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;
}

浙公网安备 33010602011771号