Posted on 2010-09-03 22:37
Uriel 閱讀(431)
評論(0) 編輯 收藏 引用 所屬分類:
POJ 、
模擬
很久不切模擬,今天比賽的時候手有點生了。。。
這題斷斷續續做了兩天,被各種事情打亂。。
純模擬,方法沒什么可說的,這題跟3699有點類似,比3699簡單很多,因為是所有的條目都輸出,不用篩選。唯一比3699麻煩一點的地方是這題對齊方式有:左對齊,右對齊,居中,這個好辦,控制下輸出的空格數量就行了。。
因為有3699的慘痛教訓,這題我是一行一行輸出。。
竟然調試完秒出sampl,一次AC~~
代碼比較丑陋。。
//Problem: 1578 User: Uriel
//Memory: 1364K Time: 0MS
//Language: G++ Result: Accepted
//Simulation
//2010.09.03
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


struct record
{
char c[100][100];
}p[100];

int n;
int maxw[80];
char s[80],lr[80];
bool start;


int main()
{
int i,j,k,cnt,x;
bool flag=false;
cnt=0;
start=false;

while(1)
{

while(1)
{
gets(s);

if(s[0]=='*')
{
flag=true;
break;
}

else if(s[0]=='<' || s[0]=='>' || s[0]=='=')
{
if(start==false)strcpy(lr,s);
start=true;
break;
}

else
{
x=0;
k=0;

for(i=0;i<strlen(s);i++)
{

if(s[i]=='&')
{
if(k>maxw[x])maxw[x]=k;
x++;
k=0;
}

else
{
p[cnt].c[x][k++]=s[i];
}
}
if(k>maxw[x])maxw[x]=k;
cnt++;
}
}

if(cnt)
{
putchar('@');

for(i=0;i<n;i++)
{
for(j=0;j<maxw[i]+2;j++)putchar('-');
if(i<n-1)putchar('-');
}
puts("@");

for(k=0;k<cnt;k++)
{

if(k==1)
{
putchar('|');

for(i=0;i<n;i++)
{
for(j=0;j<maxw[i]+2;j++)putchar('-');
if(i<n-1)putchar('+');
}
puts("|");
}

else
{

for(i=0;i<n;i++)
{
putchar('|');

if(lr[i]=='<')
{
printf(" %s ",p[k].c[i]);
for(j=0;j<maxw[i]-strlen(p[k].c[i]);j++)putchar(' ');
}

else if(lr[i]=='=')
{
for(j=0;j<(maxw[i]-strlen(p[k].c[i]))/2;j++)putchar(' ');
printf(" %s ",p[k].c[i]);
for(j=0;j<maxw[i]-(maxw[i]+strlen(p[k].c[i]))/2;j++)putchar(' ');
}

else if(lr[i]=='>')
{
for(j=0;j<maxw[i]-strlen(p[k].c[i]);j++)putchar(' ');
printf(" %s ",p[k].c[i]);
}
}
puts("|");
}
}
putchar('@');

for(i=0;i<n;i++)
{
for(j=0;j<maxw[i]+2;j++)putchar('-');
if(i<n-1)putchar('-');
}
puts("@");
}
n=strlen(s);
strcpy(lr,s);

if(!flag)
{
x=0;
k=0;
cnt=0;
gets(s);
memset(p,0x00,sizeof(p));
memset(maxw,0,sizeof(maxw));

for(i=0;i<strlen(s);i++)
{

if(s[i]=='&')
{
if(k>maxw[x])maxw[x]=k;
x++;
k=0;
}

else
{
p[cnt].c[x][k++]=s[i];
}
}
if(k>maxw[x])maxw[x]=k;
cnt++;
cnt++;
}
else
break;
}
return 0;
}