题目链接
 
 Sample 1
 Input
 10
 Bin Guigo
 Grevthar Bin
 GALA Grevthar
 GALA TitaN
 GALA Guigo
 GALA Aegis
 GALA Jojo
 GALA Grevthar
 Xiaohu Grevthar
 GALA Aegis
 Output
 PENTA KILL!
Sample 3
 Input
 7
 GALA Jojo
 Aegis Ming
 GALA Grevthar
 GALA Grevthar
 GALA Aegis
 GALA Guigo
 GALA TitaN
 Output
 SAD:(
 题目大意:
给定一个击杀序列,判断是否有一个人连续击杀五个不同的
人
死亡不影响连续
解题思路:
因为死亡不影响五杀,那么就检查是否有其中一个人”连续“杀了五个不同的人即可。
如果测试点8错误,是没有考虑全情况:
如果一个人杀了 A B C A D E 其实也算杀了五个人(已标出)。
测试样例三表示了 A B B C D E,只能算AB或者BCDE。
C++:
#include <bits/stdc++.h>
using namespace  std;
//map<string,vector<string> >ma;
map<string,int>ji;int ji_i=0;//名字转换序号
map<string,bool>yes;//记录有没有分配序号
vector<vector<int>>v(10);
int main(void){
    int flag=0;
    int n;cin>>n;
    while(n--){
        string s,ss;
        cin>>s>>ss;
        if(!yes[s]){//没有分配序号
            yes[s]^=1;//记录已分配
            ji[s]=ji_i++;//分配序号
        }
        if(!yes[ss]){
            yes[ss]^=1;
            ji[ss]=ji_i++;
        }
        v[ji[s]].push_back(ji[ss]);
    }
    for(int i=0;i<10;i++){
        if(v[i].size()>=5)//没杀够五个直接跳过
        for(int j=0;j<v[i].size()-4;j++){
            set<int>se;
            for(int k=0;k<5&&j+k<v[i].size();k++){
                se.insert(v[i][j+k]);
            }
            //cout<<se.size()<<'*';
            if(se.size()==5) { flag = 1;break; }
        }
        if(flag)break;
    }
    if(flag)cout<<"PENTA KILL!";
    else cout<<"SAD:(";
    return 0;
}
C语言AC代码:
#include <stdio.h>
#include <string.h>
char a[1000][300];
char b[1000][300];
int main(void){
    int n;scanf("%d",&n);
    if(n<5){printf("SAD:(");return 0;}//不足5个直接不用判
    for(int i=0;i<n;i++){
        //读入所有记录
        getchar();
        scanf("%s %s",a[i],b[i]);
    }
    for(int i=0;i<n;i++){
        char bb[6][300];int bb_i=0,all=1;
        strcpy(bb[bb_i++],b[i]);//记录杀过的人名
        int p=0;
        for(int j=i+1;j<n&&p<4;j++){//保证条件
            if(!strcmp(a[j],a[i])){
                p++;//保证不会超出5个
                int flag=1;
                for(int k=0;k<bb_i;k++){
                    if(strcmp(b[j],bb[k])==0) {//判断有没有重复
                        flag = 0;
                        break;
                    }
                }
                if(flag){
                    strcpy(bb[bb_i++],b[j]);
                    all++;
                    if(all==5){printf("PENTA KILL!");return 0;}//如果接下来连续都没有重复,即不同的五个人,可判为连续击杀5人
                }
            }
        }
    }
    printf("SAD:(");
    return 0;
}



















