CodeForces 589 Email Aliases (匹配,水题)

题意:给定于所有的邮箱,都是由[email protected]这样的形式构成,而且字符都是不区分大小写的。 我们有一种特殊类型的邮箱——@bmail.com,

这种邮箱除了不区分大小写外—— 1,‘@‘之前的‘.‘,有等同于无 2,‘@‘之前的第一个‘+‘之后的字符可以忽略不计 然后其他字符相同的被认定为邮箱相同。

现在给你 n 个邮箱,让你输出每个邮箱出现的次数与所有这个邮箱的原始串。

析:没什么好说的,就是先判断不是@bmail.com,然后再按要求去点,去+和@之间的值,然后一个一个的比较即可,这个题有坑,第一次WA在第54组数据上了,
就是我把@后面的点去了,这个是不能去的,别的都正常。后来我看这个总数据,一共就54组。。。。。

代码如下:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <string>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <cstring>
#include <set>
#include <queue>
#include <algorithm>
#include <vector>
#include <map>
#include <cctype>
#include <stack>
using namespace std ;

typedef long long LL;
typedef pair<int, int> P;
const int INF = 0x3f3f3f3f;
const double inf = 0x3f3f3f3f3f3f;
const double PI = acos(-1.0);
const double eps = 1e-8;
const int maxn = 2e4 + 5;
const int mod = 1e9 + 7;
const char *mark = "+-*";
const int dr[] = {-1, 0, 1, 0};
const int dc[] = {0, 1, 0, -1};
int n, m;
inline bool is_in(int r, int c){
    return r >= 0 && r < n && c >= 0 && c < m;
}
struct node{
    string s;
    string chage;
    int id;
};
node a[maxn];
bool cmp(const node &lhs, const node &rhs){
    return lhs.chage < rhs.chage || (lhs.chage == rhs.chage && lhs.id < rhs.id);
}
bool cmp1(const node &lhs, const node &rhs){
    return lhs.id < rhs.id;
}
vector<int> ans[maxn];

int main(){
    while(scanf("%d", &n) == 1){
        string s;
        for(int i = 0; i < n; ++i){
            cin >> a[i].s;
            a[i].id = i;
            ans[i].clear();
        }
        for(int i = 0; i < n; ++i){
            string t;
            if(a[i].s.size() < 10) ;
            else{
                t = a[i].s.substr(a[i].s.size()-10, 10);
                    for(int i = 0; i < 10; ++i)
                        t[i] = towlower(t[i]);
            }

            if(t == "@bmail.com"){
                bool ok = false;
                bool ok1 = false;
                for(int j = 0; j < a[i].s.size(); ++j){
                    if(a[i].s[j] == ‘@‘)  ok = false, ok1 = true;
                    else if(a[i].s[j] == ‘+‘)  ok = true;
                    if((a[i].s[j] == ‘.‘ && !ok1) || ok) continue;
                    a[i].chage.push_back(towlower(a[i].s[j]));
                }

            }
            else{
                for(int j = 0; j < a[i].s.size(); ++j){
                    a[i].chage.push_back(towlower(a[i].s[j]));
                }
            }
        }
        sort(a, a+n, cmp);
        int cnt = 0;
        ans[0].push_back(a[0].id);
        for(int i = 1; i < n; ++i){
            if(a[i].chage == a[i-1].chage) ans[cnt].push_back(a[i].id);
            else ans[++cnt].push_back(a[i].id);
        }

        sort(a, a+n, cmp1);
        printf("%d\n", cnt+1);
        for(int i = 0; i <= cnt; ++i){
            printf("%d", ans[i].size());
            for(int j = 0; j < ans[i].size(); ++j){
                printf(" %s", a[ans[i][j]].s.c_str());
            }
            printf("\n");
        }
    }
    return 0;
}
时间: 2024-12-19 11:40:05

CodeForces 589 Email Aliases (匹配,水题)的相关文章

CodeForces 707A Brain&#39;s Photos (水题)

题意:给一张照片的像素,让你来确定是黑白的还是彩色的. 析:很简单么,如果有一种颜色不是黑白灰,那么就一定是彩色的. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cmath> #include <iostream> #i

codeforces 710A A. King Moves(水题)

题目链接: A. King Moves 题意: 给出king的位置,问有几个可移动的位置; 思路: 水题,没有思路; AC代码: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <bits/stdc++.h> #include <stack> #include &l

codeforces 696A Lorenzo Von Matterhorn 水题

这题一眼看就是水题,map随便计 然后我之所以发这个题解,是因为我用了log2()这个函数判断在哪一层 我只能说我真是太傻逼了,这个函数以前听人说有精度问题,还慢,为了图快用的,没想到被坑惨了,以后尽量不用 #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> #

CodeForces 589I Lottery (暴力,水题)

题意:给定 n 和 k,然后是 n 个数,表示1-k的一个值,问你修改最少的数,使得所有的1-k的数目都等于n/k. 析:水题,只要用每个数减去n/k,然后取模,加起来除以2,就ok了. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cma

codeforces 589A Email Aliases(map)

Description Polycarp has quite recently learned about email aliases. Of course, he used to suspect that the case of the letters doesn't matter in email addresses. He also learned that a popular mail server in Berland bmail.com ignores dots (character

Bracket Sequences Concatenation Problem CodeForces - 990C(括号匹配水题)

明确一下  一个字符串有x左括号不匹配  和 另一个字符串有x个右括号不匹配  这俩是一定能够匹配的 脑子有点迷 emm... 所以统计就好了  统计x个左括号的有几个,x个右括号的有几个 然后 乘一下 如果一个串 同时存在左右括号都不匹配的情况 则忽略 因为这个串需要另外两个括号去匹配 不要忘了处理左右括号已经匹配的情况 #include <bits/stdc++.h> using namespace std; const int maxn = 1e6+5, INF = 0x7fffffff

CodeForces 518A Vitaly and Strings (水题,字符串)

题意:给定两个相同长度的字符串,让你找出一个字符串,字典序在两都之间. 析:这个题当时WA了好多次,后来才发现是这么水,我们只要把 s 串加上,然后和算数一样,该进位进位,然后再和 t 比较就行. 代码如下: #include <iostream> #include <cstdio> #include <algorithm> #include <vector> #include <set> #include <cstring> #in

Codeforces gym 100685 C. Cinderella 水题

C. CinderellaTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100685/problem/C Description Cinderella is given a task by her Stepmother before she is allowed to go to the Ball. There are N (1 ≤ N ≤ 1000) bottles with water in th

POJ 1936 All in All 匹配, 水题 难度:0

题目 http://poj.org/problem?id=1936 题意 多组数据,每组数据有两个字符串A,B,求A是否是B的子串.(注意是子串,也就是不必在B中连续) 思路 设置计数器cnt为当前已匹配A的长度,明显在扫描B的过程中只需要记住cnt这一个状态. 扫描B,每次与A[cnt]匹配就将计数器增加1,cnt与A的长度一致时A就是B的子串. 感想 这道题也许可以用更复杂的方法. 代码 1 #include <cstdio> 2 #include <cstring> 3 #i