単語の略語


1.タイトルIBMはInternational Business Machinesの略など、よく英語で略します.1つの名前には通常、複数の単語が含まれます.1つの単語は1つの大文字で頭を打ち(「A」~「Z」)、後ろには複数の小文字(「a」~「z」)が付いていないか、付いていない.略語は各単語の頭文字からなる.今、2つの名前をあげて、この2つの名前の略語が同じかどうかを要求します.2.標準入力を入力すると、複数のテストケースが含まれます.入力された最初の行は、テストケースのフォーマットを表す整数Tです.そして、Tグループのテストケースです.1組のテストケースは4行あります.最初の行は整数N(1≦N≦5)であり、最初の名前の単語の個数を表す.2行目に最初の名前が表示されます.3行目は整数M(1≦M≦5)で、2番目の名前の単語の個数を表す.4行目に2番目の名前が表示されます.各名前は複数の単語で構成され、単語間は1つのスペースで区切られ、各単語の長さは10個未満です.各単語の最初のアルファベットは大文字で、残りのアルファベットは小文字です.3.出力結果は標準出力とする.テストケースごとに1行出力します.2つの名前の略語が同じ場合は「SAME」を出力し、そうでなければ「DIFFERENT」を出力します.4.入力ケース3 4 Super Harddisc Drive Cooler 3 Spade Heart Diamond Club 3 Shuai Ge Hao 4 C P C S 5.出力例SAME SAME SAME DIFFERENT解答:この問題は2つの略語が同じかどうかを比較することであり、略語は複数の単語を含む名前から合成される.単語を読み込むたびに、最初のアルファベットを取り出して文字列に接続すると、略語が構成されます.本題の難点は単語の読み取り制御において,入力データの制御にとってACMコンテストにおける考査の重要な側面である.また、printf出力を使うのはcout出力を使うよりずっと速いことを試してみてください.  //abbreviation.cpp 
#include <fstream>
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char* argv[])
{
    //ifstream cin("aaa.txt");
    string s,ssa,ssb;
    int t,n,m;
    cin>>t;
    for (int i=0;i<t;i++)
    {
        cin>>n;
        for (int j=0;j<n;j++)
        {
            cin>>s;
            ssa=ssa+s[0];
        }

        cin>>m;
        for (int k=0;k<m;k++)
        {
            cin>>s;
            ssb=ssb+s[0];
        }

        if(ssa.compare(ssb) == 0) //    0,    1,    -1
            //cout<<"SAME"<<endl;
            printf("SAME
"
); else //cout<<"DIFFERENT"<<endl; printf("DIFFERENT
"
); ssa=""; ssb=""; } return 0; }

効果は次のとおりです.