UVA大模拟代码(白书训练计划1)UVA 401,10010,10361,537,409,10878,10815,644,10115,424,10106,465,10494

时间:2024-01-15 19:49:20

白书一:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=64609#overview

注意UVA没有PE之类的,如果PE了显示WA。

UVA401:Palindromes

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
char a[];
int l,flag,flag2,f3;
void init()
{
flag=;
flag2=;
f3=;
}
void judge();
int main()
{
while(scanf("%s",a)!=EOF)
{
l=strlen(a);
init();
for(int i=; i<l/; i++)
{
if(a[i]!=a[l--i])
{
flag=;
break;
}
}
judge();
if(flag==&&flag2==)
{
printf("%s -- is not a palindrome.\n",a);
cout<<endl;
continue;
}
if(flag==&&flag2==)
{
printf("%s -- is a regular palindrome.\n",a);
cout<<endl;
continue;
}
for(int i=; i<l/; i++)
{
if(a[i]=='A'&&a[l-i-]=='A') ;
else if(a[i]=='M'&&a[l-i-]=='M') ;
else if(a[i]=='H'&&a[l-i-]=='H') ;
else if(a[i]=='I'&&a[l-i-]=='I') ;
else if(a[i]=='Y'&&a[l-i-]=='Y') ;
else if(a[i]=='O'&&a[l-i-]=='O') ;
else if(a[i]=='T'&&a[l-i-]=='T') ;
else if(a[i]=='U'&&a[l-i-]=='U') ;
else if(a[i]=='V'&&a[l-i-]=='V') ;
else if(a[i]=='W'&&a[l-i-]=='W') ;
else if(a[i]=='X'&&a[l-i-]=='X') ;
else if(a[i]==''&&a[l-i-]=='') ;
else if(a[i]==''&&a[l-i-]=='') ;
else if((a[i]=='E'&&a[l-i-]=='')||(a[i]==''&&a[l-i-]=='E')) ;
else if((a[i]=='J'&&a[l-i-]=='L')||(a[i]=='L'&&a[l-i-]=='J')) ;
else if((a[i]=='S'&&a[l-i-]=='')||(a[i]==''&&a[l-i-]=='S')) ;
else if((a[i]=='Z'&&a[l-i-]=='')||(a[i]==''&&a[l-i-]=='Z')) ;
else
{
f3=;
break;
}
}
if(l%==)
{
if(a[l/]=='E'||a[l/]=='J'||a[l/]=='L'||a[l/]=='Z'||a[l/]==''||a[l/]=='S'||a[l/]==''||a[l/]=='')
{
f3=;
}
}
if(flag==&&f3==)
{
printf("%s -- is not a palindrome.\n",a);
cout<<endl;
continue;
}
if(flag==&&f3==)
{
printf("%s -- is a regular palindrome.\n",a);
cout<<endl;
continue;
}
if(flag==&&f3==)
{
printf("%s -- is a mirrored string.\n",a);
cout<<endl;
continue;
}
else
{
printf("%s -- is a mirrored palindrome.\n",a);
cout<<endl;
}
}
return ;
}
void judge()
{
for(int i=; i<l; i++)
{
switch(a[i])
{
case 'A':
break;
case 'E':
break;
case 'H':
break;
case 'I':
break;
case 'L':
break;
case 'J':
break;
case 'M':
break;
case 'O':
break;
case 'S':
break;
case 'T':
break;
case 'U':
break;
case 'V':
break;
case 'W':
break;
case 'X':
break;
case 'Y':
break;
case 'Z':
break;
case '':
break;
case '':
break;
case '':
break;
case '':
break;
case '':
break;
default :
flag2=;
}
}
}

UVA10010:Where's Waldorf?

#include <iostream>
#include <cstdio>
#include <string.h>
#include <cstdlib>
#include <algorithm>
using namespace std;
struct node
{
int x,y;
};
int n,m,k,l,flag,txx,tyy;
char map[][],ch[];
void init()
{
flag=;
txx=;
tyy=;
}
void dfs1(int x,int y,int le)
{
if(le==l)
{
flag=;
return ;
}
struct node t;
t.x=x;
t.y=y-;
if(t.x>=&&t.x<n&&t.y>=&&t.y<m&&map[t.x][t.y]==ch[le])
{
dfs1(t.x,t.y,le+);
}
return ;
}
void dfs2(int x,int y,int le)
{
if(le==l)
{
flag=;
return ;
}
struct node t;
t.x=x-;
t.y=y-;
if(t.x>=&&t.x<n&&t.y>=&&t.y<m&&map[t.x][t.y]==ch[le])
{
dfs2(t.x,t.y,le+);
}
return ;
}
void dfs3(int x,int y,int le)
{
if(le==l)
{
flag=;
return ;
}
struct node t;
t.x=x-;
t.y=y;
if(t.x>=&&t.x<n&&t.y>=&&t.y<m&&map[t.x][t.y]==ch[le])
{
dfs3(t.x,t.y,le+);
}
return ;
}
void dfs4(int x,int y,int le)
{
if(le==l)
{
flag=;
return ;
}
struct node t;
t.x=x-;
t.y=y+;
if(t.x>=&&t.x<n&&t.y>=&&t.y<m&&map[t.x][t.y]==ch[le])
{
dfs4(t.x,t.y,le+);
}
return ;
}
void dfs5(int x,int y,int le)
{
if(le==l)
{
flag=;
return ;
}
struct node t;
t.x=x;
t.y=y+;
if(t.x>=&&t.x<n&&t.y>=&&t.y<m&&map[t.x][t.y]==ch[le])
{
dfs5(t.x,t.y,le+);
}
return ;
}
void dfs6(int x,int y,int le)
{
if(le==l)
{
flag=;
return ;
}
struct node t;
t.x=x+;
t.y=y-;
if(t.x>=&&t.x<n&&t.y>=&&t.y<m&&map[t.x][t.y]==ch[le])
{
dfs6(t.x,t.y,le+);
}
return ;
}
void dfs7(int x,int y,int le)
{
if(le==l)
{
flag=;
return ;
}
struct node t;
t.x=x+;
t.y=y;
if(t.x>=&&t.x<n&&t.y>=&&t.y<m&&map[t.x][t.y]==ch[le])
{
dfs7(t.x,t.y,le+);
}
return ;
}
void dfs8(int x,int y,int le)
{
if(le==l)
{
flag=;
return ;
}
struct node t;
t.x=x+;
t.y=y+;
if(t.x>=&&t.x<n&&t.y>=&&t.y<m&&map[t.x][t.y]==ch[le])
{
dfs8(t.x,t.y,le+);
}
return ;
}
int main()
{
int T,ll;
scanf("%d",&T);
getchar();
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=; i<n; i++)
{
scanf("%*c%s",map[i]);
ll=strlen(map[i]);
for(int j=;j<ll;j++)
{
if(map[i][j]>='A'&&map[i][j]<='Z')
map[i][j]+=;
}
}
scanf("%d",&k);
while(k--)
{
init();
scanf("%s",ch);
l=strlen(ch);
for(int i=;i<l;i++)
{
if(ch[i]>='A'&&ch[i]<='Z')
ch[i]+=;
}
for(int i=; i<n; i++)
{
for(int j=; j<m; j++)
{
if(map[i][j]==ch[])
{
txx=i+;
tyy=j+;
dfs1(i,j,);
if(flag)
break;
dfs2(i,j,);
if(flag)
break;
dfs3(i,j,);
if(flag)
break;
dfs4(i,j,);
if(flag)
break;
dfs5(i,j,);
if(flag)
break;
dfs6(i,j,);
if(flag)
break;
dfs7(i,j,);
if(flag)
break;
dfs8(i,j,);
if(flag)
break;
}
}
if(flag) break;
}
printf("%d %d\n",txx,tyy);
}
if(T) printf("\n");
}
return ;
}

UVA10361:Automatic Poetry

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,l1,l2,l3,l4,l5,l6;
char a[],b[];
void init()
{
l3=-;
l4=-;
l5=-;
l6=-;
}
int main()
{
scanf("%d",&n);
getchar();
while(n--)
{
gets(a);
gets(b);
l1=strlen(a);
l2=strlen(b);
init();
for(int i=;i<l1;i++)
{
if(a[i]!='<'&&a[i]!='>')
{
printf("%c",a[i]);
}
else if(a[i]=='<'&&l3==-)
{
l3=i;
}
else if(a[i]=='>'&&l4==-)
{
l4=i;
}
else if(a[i]=='<'&&l5==-)
{
l5=i;
}
else if(a[i]=='>'&&l6==-)
{
l6=i;
}
}
printf("\n");
for(int i=;i<l2;i++)
{
if(b[i]=='.')
break;
printf("%c",b[i]);
} for(int i=l5+;i<l6;i++)
{
printf("%c",a[i]);
}
for(int i=l4+;i<l5;i++)
{
printf("%c",a[i]);
}
for(int i=l3+;i<l4;i++)
{
printf("%c",a[i]);
}
for(int i=l6+;i<l1;i++)
{
printf("%c",a[i]);
}
printf("\n");
}
return ;
}

UVA537:Artificial Intelligence?

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
#define inf 0x3f3f3f3f
using namespace std;
char a[],b[],c[],d[];
int l,U,I,P,t1,t2,t3;
double v1,i1,w1;
void init()
{
U=inf;
I=inf;
P=inf;
v1=;
i1=;
w1=;
t1=t2=t3=;
}
int main()
{
int T;
scanf("%d",&T);
getchar();
for(int z=; z<=T; z++)
{
init();
gets(a);
l=strlen(a);
for(int i=; i<l; i++)
{
if(a[i]=='U'&&a[i+]=='=')
{
for(int j=i+; j<l; j++)
{
if((a[j]>=''&&a[j]<='')||a[j]=='.')
{
b[t1++]=a[j];
}
else
{
b[t1]='\0';
if(a[j]=='k')
v1=;
else if(a[j]=='V')
v1=;
else if(a[j]=='m')
v1=0.001;
else if(a[j]=='M')
v1=;
break;
}
}
U=;
}
else if(a[i]=='I'&&a[i+]=='=')
{
for(int j=i+; j<l; j++)
{
if((a[j]>=''&&a[j]<='')||a[j]=='.')
{
c[t2++]=a[j];
}
else
{
c[t2]='\0';
if(a[j]=='m')
i1=0.001;
else if(a[j]=='M')
i1=;
else if(a[j]=='k')
i1=;
else if(a[j]=='A')
i1=;
break;
}
}
I=;
}
else if(a[i]=='P'&&a[i+]=='=')
{
for(int j=i+; j<l; j++)
{
if((a[j]>=''&&a[j]<='')||a[j]=='.')
{
d[t3++]=a[j];
}
else
{
d[t3]='\0';
if(a[j]=='M')
w1=;
else if(a[j]=='m')
w1=0.001;
else if(a[j]=='k')
w1=;
else if(a[j]=='W')
w1=;
break;
}
}
P=;
}
}
printf("Problem #%d\n",z);
double sum;
if(U==&&I==)
{
sum=atof(b)*atof(c)*v1*i1;
printf("P=%.2lfW\n",sum);
}
else if(U==&&P==)
{
sum=(atof(d)*w1)/(atof(b)*v1);
printf("I=%.2lfA\n",sum);
}
else if(I==&&P==)
{
sum=(atof(d)*w1)/(atof(c)*i1);
printf("U=%.2lfV\n",sum);
}
cout<<endl;
}
return ;
}

UVA409:Excuses, Excuses!

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
typedef struct Node
{
struct Node *next[];
int flag;
} Node,*Tree;
int n,m,K,ll,M;
void Creat(Tree &T)
{
T=(Node *)malloc(sizeof(Node));
T->flag=;
for(int i=; i<; i++)
T->next[i]=NULL;
}
void insert(Tree &T,char *s)
{
Tree p=T;
int t;
int l=strlen(s);
for(int i=; i<l; i++)
{
if(s[i]>='a'&&s[i]<='z')
t=s[i]-'a';
else t=s[i]-'A';
if(p->next[t]==NULL)
Creat(p->next[t]);
p=p->next[t];
}
p->flag=;
}
void search(Tree &T,char *s)
{
Tree p=T;
int t;
int l=strlen(s);
for(int i=; i<l; i++)
{
if(s[i]>='a'&&s[i]<='z')
t=s[i]-'a';
else t=s[i]-'A';
if(p->next[t]==NULL)
return ;
p=p->next[t];
}
if(p->flag==)
M++;
return ;
}
void D(Tree p)
{
for(int i=; i<; i++)
{
if(p->next[i]!=NULL)
D(p->next[i]);
}
free(p);
}
int main()
{
K=;
char ch[],q[],aa[][];
int f1,p[],maxx;
while(scanf("%d%d",&n,&m)!=EOF)
{
Tree T;
maxx=-;
memset(p,,sizeof(p));
Creat(T);
for(int i=; i<n; i++)
{
scanf("%s",ch);
insert(T,ch);
}
getchar();
for(int i=; i<m; i++)
{
gets(ch);
strcpy(aa[i],ch);
ll=strlen(ch);
f1=;
M=;
for(int j=; j<ll; j++)
{
if((ch[j]>='a'&&ch[j]<='z')||(ch[j]>='A'&&ch[j]<='Z'))
{
q[f1++]=ch[j];
}
else
{
q[f1]='\0';
if(f1!=)
search(T,q);
f1=;
}
}
if(f1!=)
{
q[f1]='\0';
search(T,q);
}
//cout<<"M=="<<M<<endl;
maxx=max(maxx,M);
p[i]=M;
}
printf("Excuse Set #%d\n",++K);
for(int i=; i<m; i++)
{
if(p[i]==maxx)
printf("%s\n",aa[i]);
}
D(T);
printf("\n");
}
return ;
}

UVA10878: Decode the tape

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int t,l,ll,tt;
char a[];
int main()
{
tt=;
while(gets(a)!=NULL)
{
if(strcmp(a,"___________")==)
{
continue;
}
l=strlen(a);
t=;
ll=;
for(int i=l-;i>=;i--)
{
if(a[i]==' ')
{
ll++;
}
else if(a[i]=='o')
{
t+=pow(,ll);
ll++;
}
}
printf("%c",t);
}
return ;
}

UVA10815:Andy's First Dictionary

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
typedef struct Node
{
struct Node *next[];
int flag;
} Node,*Tree;
int f1,l,tt;
char a[][],CH[];
void Creat(Tree &T)
{
T=(Node *)malloc(sizeof(Node));
T->flag=;
for(int i=; i<; i++)
T->next[i]=NULL;
}
void insert(Tree &T,char *s)
{
Tree p=T;
int t;
int l=strlen(s);
for(int i=; i<l; i++)
{
if(s[i]>='a'&&s[i]<='z')
t=s[i]-'a';
else t=s[i]-'A';
if(p->next[t]==NULL)
Creat(p->next[t]);
p=p->next[t];
}
p->flag=;
}
void D(Tree p)
{
for(int i=; i<; i++)
{
if(p->next[i]!=NULL)
D(p->next[i]);
}
free(p);
}
void dfs(Tree &P,int r,int l)
{
if(P->flag>)
{
CH[l]='a'+r;
CH[l+]='\0';
printf("%s\n",CH);
}
else CH[l]=CH[l]='a'+r;
for(int i=; i<; i++)
{
if(P->next[i]!=NULL)
dfs(P->next[i],i,l+);
}
}
int main()
{
Tree T;
tt=;
while(gets(a[tt])!=NULL)
{
tt++;
}
Creat(T);
char ch[];
for(int i=; i<tt; i++)
{
l=strlen(a[i]);
f1=;
for(int j=; j<l; j++)
{
if((a[i][j]>='a'&&a[i][j]<='z')||(a[i][j]>='A'&&a[i][j]<='Z'))
{
ch[f1++]=a[i][j];
}
else
{
ch[f1]='\0';
// printf("%s\n",ch);
if(f1!=)
insert(T,ch);
f1=;
}
}
if(f1!=)
{
ch[f1]='\0';
insert(T,ch);
//printf("%s\n",ch);
}
}
for(int i=; i<; i++)
{
if(T->next[i]!=NULL)
dfs(T->next[i],i,);
}
D(T);
return ;
}

UVA644: Immediate Decodability

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
typedef struct Node
{
struct Node *next[];
int flag;
} Node,*Tree;
int f1;
int cmp(const void *aa,const void *bb)
{
return strcmp((char *)bb,(char *)aa);
}
void Creat(Tree &T)
{
T=(Node *)malloc(sizeof(Node));
T->flag=;
for(int i=; i<; i++)
T->next[i]=NULL;
}
void insert(Tree &T,char *s)
{
Tree p=T;
int t;
int l=strlen(s);
for(int i=; i<l; i++)
{
t=s[i]-'';
if(p->next[t]==NULL)
Creat(p->next[t]);
p=p->next[t];
p->flag++;
}
if(p->flag>)
{
f1=;
}
}
void D(Tree p)
{
for(int i=; i<; i++)
{
if(p->next[i]!=NULL)
D(p->next[i]);
}
free(p);
}
char a[][];
int main()
{ Tree T;
int K=,tt=;
while(scanf("%s",a[])!=EOF)
{
if(strcmp(a[],"")==) break;
tt=;
while(scanf("%s",a[tt])!=EOF)
{
if(strcmp(a[tt],"")==)
break;
tt++;
}
Creat(T);
f1=;
qsort(a,tt,sizeof(a[]),cmp);
for(int i=; i<tt; i++)
{
insert(T,a[i]);
if(f1==) break;
}
if(f1)
printf("Set %d is immediately decodable\n",++K);
else printf("Set %d is not immediately decodable\n",++K);
D(T);
}
return ;
}

UVA10115:Automatic Editing

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int n;
char a[][],b[][],ch[],t[];
int main()
{
while(scanf("%d",&n)!=EOF&&n!=)
{
getchar();
for(int i=;i<n;i++)
{
gets(a[i]);
gets(b[i]);
}
gets(ch);
for(int i=;i<n;++i)
{
if(strstr(ch,a[i])!=NULL)//如果没有返回空
{
char *p=strstr(ch,a[i]);
int l=strlen(a[i]);
strcpy(t,p+l);
*p='\0';
strcat(ch,b[i]);
strcat(ch,t);
i--;
}
}
printf("%s\n",ch);
}
return ;
}

UVA424:Integer Inquiry

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std; int main()
{
int l1;
char a[];
int b[];
memset(b,,sizeof(b));
while(scanf("%s",a)!=EOF)
{
if(a[]=='') break;
l1=strlen(a);
int j=;
for(int i=l1-; i>=; i--)
{
b[j]=b[j]+a[i]-'';
j++;
}
}
int t;
for(int i=; i<; i++)
{
t=b[i];
if(b[i]>)
{
b[i]=t%;
b[i+]=b[i+]+t/;
}
else b[i]=t;
}
int flag=;
for(int i=-; i>=; i--)
{
if (flag || b[i])
{
flag = ;
printf("%d",b[i]);
}
}
if (!flag) printf("");
printf("\n");
return ;
}

UVA10106:Product

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
char str1[],str2[];
int d[],f[],c[];
int l1,l2,l,w,e;
void init()
{
memset(c,,sizeof(c));
memset(d,,sizeof(d));
memset(f,,sizeof(f));
}
int main()
{
while(scanf("%s",str1)!=EOF)
{
init();
scanf("%s",str2);
l1=strlen(str1);
l2=strlen(str2);
l=max(l1,l2);
w=l1;
e=l2;
for(int i=; i<l; i++)
{
if(l1->=)
{
d[i]=str1[l1-]-'';
l1--;
}
else d[i]=;
if(l2->=)
{
f[i]=str2[l2-]-'';
l2--;
}
else f[i]=;
}
for(int i=; i<w; i++)
{
for(int j=; j<e; j++)
{
c[i+j]=c[i+j]+d[i]*f[j];
}
}
for(int i=; i<; i++)
{
if(c[i]>=)
{
c[i+]+=c[i]/;
c[i]=c[i]%;
}
}
int flag=;
for(int i=; i>=; i--)
{
if(flag||c[i])
{
flag=;
printf("%d",c[i]);
}
}
if(flag==) printf("");
printf("\n"); }
return ;
}

UVA465:Overflow

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>//atof函数
#include <algorithm>
#define inf 0x7fffffff// inf==2147483647
using namespace std;
char a[],b[],c[];
double x,y;
int main()
{
while(scanf("%s%s%s",a,b,c)!=EOF)
{
printf("%s %s %s\n",a,b,c);
x=atof(a);
y=atof(c);
if(x>inf)printf("first number too big\n");
if(y>inf)printf("second number too big\n");
if(strcmp(b,"+")==&&x+y>inf)printf("result too big\n");
else if(strcmp(b,"*")==&&x*y>inf)printf("result too big\n");
}
return ;
}
/*
函数名: atof
功 能: 把字符串转换成浮点数
用 法: double atof(const char *nptr);
程序例:
*/

UVA10494: If We Were a Child Again

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
char a[],b[],c[];
long long d;
long long MOD(char * src, long long mod)//模板
{
long long len=strlen(src),i;
long long t=;//中间变量,最终存储余数
for(i=; i<len; i++)
{
t*=;
t+=src[i]-'';
if(t>=mod)
t=t%mod;
}
return t;
}
void division(char * src, long long n)//模板
{
long long len = strlen(src),i,k,t=,s=;
char dest[];
bool flag = true; //商是否有了第一个有效位,防止商首部一直出现0
for(i=,k=; i<len; i++)
{
t = s*+(src[i]-); //新余数
if(t/n> || t==) //余数为0要修改商
{
dest[k++] = t/n+,s = t%n,flag = false;
}
else //不够除,修改余数
{
s = t;
if(!flag) //商已经有有效位了,补零
dest[k++] = '';
}
}
for(i=; i<k; i++)
cout<<dest[i];
cout<<endl;
}
int main()
{
while(scanf("%s%s%lld",a,b,&d)!=EOF)
{
if(strcmp(b,"/")==)
{
division(a,d);
}
else if(strcmp(b,"%")==)
{
cout<<MOD(a,d)<<endl;
}
}
return ;
}