ZOJ 问题 B: 小花梨的三角形

不恋尘世浮华,不写红尘纷扰,不叹世道苍凉,不惹情思哀怨,闲看花开,静待花落,冷暖自知,干净如始。

题目描述

小花梨现在有一个n层三角形图(参考下图),第i层有2i−1个边长为1的等边三角形。
每个交点处存在一个字符,总共有n+1层字符,第i层有i个字符。
小花梨用等边三角形三个顶点上的字符来表示这个三角形,两个等边三角形如果它们的三个顶点字符相同(不区分顺序)则视为同一类等边三角形。小花梨想知道总共存在多少种不同类别的等边三角形。

 

输入

第一行为正整数n,表示三角形层数(1≤n≤100)。
接下来n+1行,第i行输入i个字符,表示第i层的字符。(字符只包含小写字母"a−z")

 

输出

输出一个整数表示存在多少种不同类别的三角形

 

样例输入

复制样例数据

1
a
bc

样例输出

1

 

提示

只存在顶点为(a,b,c)的三角形

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
mapmp;
string s[105],a;
int n;
int main()
{
    int i,j,x,y;
    cin>>n;
    for(i=1; i<=n+1; i++)
    {
        cin>>s[i];
        s[i]='*'+s[i];
    }
    for(x=1; x<=n+1; x++)
    {
        for(y=1; y<=x; y++)
        {
            for(i=1; x+i<=n+1; i++)
            {
                a="";
                a+=s[x][y];
                a+=s[x+i][y];
                a+=s[x+i][y+i];
                sort(a.begin(),a.end());
                mp[a]=1;
            }
            for(i=1; y<=x-i&&y-i>=1; i++)
            {
                a="";
                a+=s[x][y];
                a+=s[x-i][y];
                a+=s[x-i][y-i];
                sort(a.begin(),a.end());
                mp[a]=1;
            }
        }
    }
    cout<

 

你可能感兴趣的:(省赛练习)