码迷,mamicode.com
首页 > 其他好文 > 详细

1941. Scary Martian Word

时间:2015-07-29 21:14:39      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

1941. Scary Martian Word

这道题 一个长度为3的字符串视为 一个 火星文 字母(ASCII 33-122) ,给出一个火星人认为恐怖的单词(由火星字母组成)

然后 给你一篇文章问你火星人认为恐怖的单词个数(可以乱序)

嗯,一开始题意理解错了。。。然后就错了

彬神说……是双端队列

然后写了,感觉自己真是对对对的……

嗯,过度自信,起始忽略了一个条件。

做法,因为是三个单词 122+122*10+122*100 也就差不多了

然后哈希。数组标记,

懒得写了……

贴代码……

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <string>
#include <sstream>
using namespace std;
typedef long long ll;
const double ESP = 10e-8;
const int MAXN = 2000000 + 10;

int vis[MAXN];
int num[MAXN];
int arr[MAXN];
int n;
char word[MAXN*3+1];
int main(){
//    freopen("input.txt","r",stdin);

    int ans = 0;
    memset(num,0,sizeof(num));
    n = 0;
    gets(word);
    int len = strlen(word);
    for(int i = 0;i < len;i+=4){
        int tt = (word[i]-33) + (word[i+1]-33)*10+(word[i+2]-33)*100;
        num[tt]++;
        if(num[tt] == 1){
            n++;
        }
    }
    gets(word);
    len = strlen(word);
    memset(arr,-1,sizeof(arr));
    int cnt = 0;
    for(int i = 0;i < len;i+=4){
        int tt = (word[i]-33) + (word[i+1]-33)*10+(word[i+2]-33)*100;
        if(num[tt]){
            arr[cnt++] = tt;
        }
    }
    int l = 0;
    int r = 0;
    memset(vis,0,sizeof(vis));
    int nn = 0;
    while(l < cnt && r < cnt){
        if(arr[r] != -1){
            vis[ arr[r] ]++;
            if(vis[arr[r]] == num[arr[r] ]){
                nn++;
            }else if(vis[ arr[r] ] > num[ arr[r] ]){
                while(l < cnt && arr[l] != arr[r]){
                    if(vis[arr[l] ] == num[arr[l] ]){
                        nn--;
                    }
                    vis[ arr[l] ]--;
                    l++;
                }
                vis[ arr[l]]--;
                l++;
            }
            if(nn == n){
                ans++;
                vis[arr[l]]--;
                nn--;
                l++;
            }
            r++;
        }else{
            nn = 0;
            memset(vis,0,sizeof(vis));
            r++;
            l = r;
        }
    }
    printf("%d\n",ans);
    return 0;
}

不写注释的果然不是好程序员……

1941. Scary Martian Word

标签:

原文地址:http://www.cnblogs.com/hanbinggan/p/4687232.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!