Posted on 2010-09-03 22:37
Uriel 阅读(408)
评论(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;
}