题目描述
男神Sharpland农场的布局相当奇特,他的牛白天吃草的田野周围,绕着一条大型圆形道路。
每天早晨,牛在前往田野时要穿过这条路,每天晚上,他们离开田野回到谷仓时,都会再过一遍这条路。
正如我们所知,牛是一种习惯性动物,它们每天都以同样的方式过马路。每头牛都在不同的点进入田野,走出田野,并且所有的点都与其他的不同。Sharpland拥有26头牛,他把他们命名为A到Z,所以在这条路上有52个点。Sharpland通过绕着圆形道路顺时针方向扫描这些点来记录它们,写下每一个点所属的牛的名字,最终形成一个有52个字符的字符串,字母表中的每一个字母都出现了两次。
他没有记录哪些点是进入田野的点,哪些是走出田野的点。
看着他的地图,Sharpland很好奇,在一天中会有多少对不同的奶牛穿过马路。如果牛A从入口到出口的路径必须穿过牛B从入口到出口的路径,他把这对奶牛(A,B)称为交叉对。请帮助Sharpland计算出交叉对的数量。
输入格式
输入由一行包含52个大写字母的字符串组成。其中每个大写字母都出现了两次。
输出格式
请输出交叉对的总数。
样例数据
input
ABCCABDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ
output
1
思路
读入,判断,没出现过的记坐标a,出现过的几坐标b,然后就两重循环搜,满足条件的累加嘛。
程序如下
#include<bits/stdc++.h>
using namespace std;
int a['Z'+1]={0},b['Z'+1]={0};
int main()
{
char ch;
int s=0;
for(int i=1;i<=52;i++)
{
ch=getchar();
if(a[ch]==0) a[ch]=i;
else b[ch]=i;
}
for(int i='A';i<='Z';i++)
for(int j=i+1;j<='Z';j++)
if(((a[i]<a[j] && a[j]<b[i]) && (a[j]<b[i] && b[i]<b[j])) || ((a[j]<a[i] && a[i]<b[j]) && (a[i]<b[j] && b[j]<b[i]))) s++;
cout<<s<<endl;
return 0;
}
男神Sharpland农场的布局相当奇特,他的牛白天吃草的田野周围,绕着一条大型圆形道路。
每天早晨,牛在前往田野时要穿过这条路,每天晚上,他们离开田野回到谷仓时,都会再过一遍这条路。
正如我们所知,牛是一种习惯性动物,它们每天都以同样的方式过马路。每头牛都在不同的点进入田野,走出田野,并且所有的点都与其他的不同。Sharpland拥有26头牛,他把他们命名为A到Z,所以在这条路上有52个点。Sharpland通过绕着圆形道路顺时针方向扫描这些点来记录它们,写下每一个点所属的牛的名字,最终形成一个有52个字符的字符串,字母表中的每一个字母都出现了两次。
他没有记录哪些点是进入田野的点,哪些是走出田野的点。
看着他的地图,Sharpland很好奇,在一天中会有多少对不同的奶牛穿过马路。如果牛A从入口到出口的路径必须穿过牛B从入口到出口的路径,他把这对奶牛(A,B)称为交叉对。请帮助Sharpland计算出交叉对的数量。
输入格式
输入由一行包含52个大写字母的字符串组成。其中每个大写字母都出现了两次。
输出格式
请输出交叉对的总数。
样例数据
input
ABCCABDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ
output
1
思路
读入,判断,没出现过的记坐标a,出现过的几坐标b,然后就两重循环搜,满足条件的累加嘛。
程序如下
#include<bits/stdc++.h>
using namespace std;
int a['Z'+1]={0},b['Z'+1]={0};
int main()
{
char ch;
int s=0;
for(int i=1;i<=52;i++)
{
ch=getchar();
if(a[ch]==0) a[ch]=i;
else b[ch]=i;
}
for(int i='A';i<='Z';i++)
for(int j=i+1;j<='Z';j++)
if(((a[i]<a[j] && a[j]<b[i]) && (a[j]<b[i] && b[i]<b[j])) || ((a[j]<a[i] && a[i]<b[j]) && (a[i]<b[j] && b[j]<b[i]))) s++;
cout<<s<<endl;
return 0;
}