[COCI 2011-2012#5] KRIŽALJKA
题目描述
有两个单词 A , B A,B A,B,将 A A A 水平摆放, B B B 竖直摆放,两个单词重叠部分必须为同一字母,且这一字母须在 A , B A,B A,B 中第一次出现。
例如,当 A="ABBA",B="CCBB"
时,输出如下所示:
.C..
.C..
ABBA
.B..
输入格式
一行,两个字符串,由大写字母组成,分别表示 A A A 和 B B B。
输出格式
一个矩阵,表示摆放结果。
其中无字符用 .
表示。
样例 #1
样例输入 #1
BANANA PIDZAMA
样例输出 #1
.P....
.I....
.D....
.Z....
BANANA
.M....
.A....
样例 #2
样例输入 #2
MAMA TATA
样例输出 #2
.T..
MAMA
.T..
.A..
样例 #3
样例输入 #3
REPUBLIKA HRVATSKA
样例输出 #3
H........
REPUBLIKA
V........
A........
T........
S........
K........
A........
提示说明
思路:
先找到在两个字符串中共同出现的第一个字符,并记下它在两个字符串中的下标。
接下来就是输出,比如我们刚才得到的两个位置是 x 和 y,那么观察样例第 y 行输出第一个字符串就行了。至于其余行,只在第 x 列输出那一行第二个字符串的字母,其它的就输出 . 字符。
数据保证有解。
字符串由大写字母构成。
题目译自 COCI 2011/2012 #5 T1。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
string a,b;
cin>>a>>b;
ll n=a.size(),m=b.size();
ll x,y,flag=1;
for(ll i=0;i<=n-1;i++)
{
if(flag==0) break;
for(ll j=0;j<=m-1;j++)
{
if(a[i]==b[j])
{
x=i,y=j;//记下下标
flag=0;
break;//只找第一个
}
}
}
for(ll i=0;i<=m-1;i++)
{
if(i==y) cout<<a;
else
{
for(ll j=0;j<=n-1;j++)
{
if(j==x) cout<<b[i];
else cout<<".";
}
}
cout<<endl;
}
return 0;
}