概述
写在前面
第9篇博客,一共12道题,分成2篇来写.
6. Uva 232 - Crossword Answers
11:56开始
12:03写题意
给出r(10)行c(10)列的网格,里面有若干个’*’和大写字母.一个字母格被定义为合格的要求是左边或上边是’*’或者边缘.按从上到下从左到右的顺序给合格的格排序,然后分横竖输出所有词:合格的格横或竖连续走尽量多的字母格,是一个词.
读入后,找出合格的格,编号,遍历即可,模拟题.
15:18醒来,写代码.
16:10 AC
#include <bits/stdc++.h>
using namespace std;
char s[12][12];
struct item
{
int i;
int j;
int idx;
};
int main(void)
{
int n,m,kase=1;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
vector<item> si,sj;
int idx=1;
if(kase!=1)
printf("n");
for(int i=0;i<n;i++)
{
scanf("%s",s[i]);
for(int j=0;j<m;j++)
{
int flag=0;
if(isalpha(s[i][j])&&(i-1<0||s[i-1][j]=='*'))
{
si.push_back({i,j,idx});
flag=1;
}
if(isalpha(s[i][j])&&(j-1<0||s[i][j-1]=='*'))
{
sj.push_back({i,j,idx});
flag=1;
}
if(flag)
idx++;
}
}
printf("puzzle #%d:n",kase++ );
printf("Acrossn");
for(item x:sj)
{
printf("%3d.",x.idx);
int tj=x.j;
while(tj<m&&s[x.i][tj]!='*')
printf("%c",s[x.i][tj++]);
printf("n");
}
printf("Downn");
for(item x:si)
{
printf("%3d.",x.idx);
int ti=x.i;
while(ti<n&&s[ti][x.j]!='*')
printf("%c",s[ti++][x.j]);
printf("n");
}
}
return 0;
}
提交了7次,有5个格式错误和1个逻辑错误……横纵坐标要对应啊!
7. uva 1368 - DNA Consensus String
给出n(1000)个长度为m的DNA串,求一个串到这些串的编辑距离和最小,并输出这个距离.
按每个字符遍历即可.
#include <bits/stdc++.h>
int save[1010][4];
int main(void)
{
int t;
scanf("%d",&t);
while(t--)
{
memset(save,0,sizeof(save));
int n,m;
scanf("%d%d",&n,&m);
getchar();
for(int i=0;i<n;i++)
{
int t=0;
char c;
while((c=getchar())!='n')
{
int p=0;
switch(c)
{
case 'A':p=0;break;
case 'C':p=1;break;
case 'G':p=2;break;
case 'T':p=3;break;
}
save[t++][p]++;
}
}
int ans=0;
for(int i=0;i<m;i++)
{
int mx=save[i][0],p=0;
for(int j=1;j<4;j++)
if(mx<save[i][j])
mx=save[i][j],p=j;
ans+=n-mx;
char c='