女神はあなたに文字列を教えます——ACはただ1つの梦想ではありません
5934 ワード
D-女神が文字列を教える-ACは夢だけではないTime Limit:2000/1000 MS(Java/others)Memory Limit:128000/64000 KB(Java/others)Submit Status Problem Description
AC is not a dream.--女神はみんなが多くのACを望んで、みんながACの中で自信を見つけることができることを望んでいます.そこで女神はあなたに聞いて、一言の中にACdreamがいくつありますか?大文字と小文字を区別する必要はありません.スペースを無視して、車に戻ります.一言とは句点(.)、疑問符(?)、感嘆符(!)で終わる一連の可視文字(ASCII 32(スペース)~126('~'波線))構成された文字列.具体的なASCIIコードテーブルは、私のInputをスタンプしてください.
複数行の文字列で構成され、各文はデータのセットであり、1文の定義は問題面のようなものである.総文字数は100000文字を超えない.Output
データのセットごとに整数を出力します.Sample Input
AC is not a dream. But ACdream is a dream world where every body can have an AC dream. AC?AC! Sample Output
0 2 0 0 Hint
気をつけてください
題目大意:文字列にマッチする、「ACdream」.大文字と小文字を区別せず、スペースを無視して、車に戻る.分析:大体三つのピットがある.一、大文字と小文字を統一する.二、行末の車をどのように処理して、複数行の文字列を一つの行にまとめるか.三、一つの行には一つ以上の文があるかもしれない.
コード:
AC is not a dream.--女神はみんなが多くのACを望んで、みんながACの中で自信を見つけることができることを望んでいます.そこで女神はあなたに聞いて、一言の中にACdreamがいくつありますか?大文字と小文字を区別する必要はありません.スペースを無視して、車に戻ります.一言とは句点(.)、疑問符(?)、感嘆符(!)で終わる一連の可視文字(ASCII 32(スペース)~126('~'波線))構成された文字列.具体的なASCIIコードテーブルは、私のInputをスタンプしてください.
複数行の文字列で構成され、各文はデータのセットであり、1文の定義は問題面のようなものである.総文字数は100000文字を超えない.Output
データのセットごとに整数を出力します.Sample Input
AC is not a dream. But ACdream is a dream world where every body can have an AC dream. AC?AC! Sample Output
0 2 0 0 Hint
気をつけてください
題目大意:文字列にマッチする、「ACdream」.大文字と小文字を区別せず、スペースを無視して、車に戻る.分析:大体三つのピットがある.一、大文字と小文字を統一する.二、行末の車をどのように処理して、複数行の文字列を一つの行にまとめるか.三、一つの行には一つ以上の文があるかもしれない.
コード:
#include <iostream>
#include <cstdio>
#include <cctype>
#include <string>
#include <cstring>
using namespace std;
const int maxn = 100010;
int n, m, kase;
int a[maxn], c[maxn];
char s[maxn], q[maxn] = "";
char t[10] = "acdream";
int main() {
int ff = 0, tt = 0;
while(cin >> s) {
if(ff == 0) strcpy(q, s);
if(ff == 1) strcat(q, s);
int len = strlen(s);
if(s[len-1] != '?' && s[len-1] != '.' && s[len-1] != '!') { ff = 1; continue; } // ,
strcpy(s, q);
int cnt1 = 1;
len = strlen(s);
memset(c, 0, sizeof(c));
for(int i = 0; i < len; i++) {
if(s[i] == '?' || s[i] == '.' || s[i] == '!') // ,
c[cnt1++] = i;
if(isupper(s[i])) s[i] += 32; // ,
}
for(int ll = 1; ll < cnt1; ll++) {
int cnt2 = 0, ans = 0;
memset(a, 0, sizeof(a));
for(int i = c[ll-1]; i < c[ll]; i++)
if(s[i] == 'a') a[cnt2++] = i;
for(int i = 0; i < cnt2; i++) {
int flag = 0;
for(int j = a[i], k = 0; k < 7; j++, k++) {
if(s[j] == ' ') j++;
else if(s[j] != t[k]) {
flag = 1;
break;
}
}
if(!flag) ans++;
}
printf("%d
", ans);
}
memset(q, 0, sizeof(q));
tt = 0;
ff = 0;
}
return 0;
}