• 小米oj 不要乱改代码(并查集)


    - 不要乱改代码

    序号:#91难度:非常难时间限制:2000ms内存限制:50M

    描述

    最近小米公司内爆发了一种名叫“瞎改我代码就会死”的传染病。

    传播方式是只要与染病者共同编辑过一份代码,那么就会被感染,无关改动的先后顺序

    这个病毒病的潜伏期很长,码农感染后仍然能像正常人一样 coding,但一旦被传染,就必死无疑。

    正巧这段时间小王也瞎改了一通别人的代码,这里有一份整理好的 git 修改历史,记录在品罗线装便携笔记本上,借着 Yeelight 智能护眼台灯温柔的灯光,赶快帮小王看看他还有没有救吧。

    输入

    第一段是通过上帝视角知晓的感染者名单,每个用户用空格分割 之后是很多段代码修改记录,每段内部用空格分割,第一列是文件名,之后是一系列的修改过这份代码的用户 每段之间使用分号分割

    ps1:小王在git上的用户名是 neighbor_wang

    ps2:0<代码文件数,码农数<=10000

    输出

    小王还有救输出"good programmer",否则输出"go die"

    输入样例

    xiaohong;Main.java neighbor_wang xiaoming;IndexController.java xiaohong xiaoming
    xiaohong god;DoSomeService.java xiaoqiang neighbor_wang;MagicCode.scala junjun xiaohong

     复制样例

    输出样例

    go die
    good programmer
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=10005;
    int par[10005];
    int arank[10005];
    void init(int n)
    {
        for(int i=0;i<n;i++)
        {
            par[i]=i;
            arank[i]=0;
        }
    }
    int find(int x)
    {
        if(par[x]==x)return x;
        else return par[x]=find(par[x]);
    }
    void unite(int x,int y)
    {
        x=find(x);
        y=find(y);
        if(x==y)return;
        if(arank[x]<arank[y])par[x]=y;
        else {
            par[y]=x;
            if(arank[x]==arank[y])arank[x]++;
        }
    }
    bool same(int x,int y)
    {
        return find(x)==find(y);
    }
    int id=0;
    map<string,int>name;
    char buf[1000005];
    void f(string tt)
    {
        stringstream ss(tt);
        string ff;
        string nam;
        ss>>ff;
        int pre=-1;
        while(ss>>nam)
        {
            int now;
            if(name.find(nam)==name.end())
            {
                now=id;
                name[nam]=id++;
            }
            else{
                now=name[nam];
            }
            if(pre!=-1)
            {
                unite(now,pre);
            }
            pre=now;
        }
    }
    int main()
    {
        while(cin.getline(buf,1000005))
        {
            id=0;
            int len=strlen(buf)+1;
            buf[strlen(buf)+1]='';
            buf[strlen(buf)]=';';
            init(10005);
            name.clear();
            string tmp="";
            int pos=0;
            for(;buf[pos]!=';';pos++)
            {
                if(buf[pos]!=' ')tmp+=buf[pos];
                else {
                    name[tmp]=id++;
                }
            }
            name[tmp]=id++;
            for(int i=id-1;i>=0;i--)
                unite(i,0);
    
            string tt="";
            for(int j=pos+1;j<len;j++)
            {
                if(buf[j]==';'){f(tt);tt="";}
                else tt+=buf[j];
            }
            
            string wang="neighbor_wang";
            if(name.find(wang)==name.end()||(!same(name[wang],0)))
            {
                puts("good programmer");
            }
            else puts("go die");
    
        }
        return 0;
    }
    
    
    
    
    
    
  • 相关阅读:
    学习如何看懂SQL Server执行计划(一)——数据查询篇
    【异常】warning: refname 'feature1.3.0' is ambiguous.导致git merge失败
    Mac上使用sunlogin向日葵软件远程控制电脑
    软件随想录-
    idea启动卡死,项目界面一直processing
    【异常】hbase启动后hdfs文件权限目录不一致,导致Phoenix无法删除表结构
    【异常】ssh无法登录验证,非root用户ssh本机无法成功
    【异常】postman能够请求成功获取到参数,前端请求的却请求不到
    CentOS7磁盘空间不足,却找不到占用空间的大文件
    【异常】553 Mail from must equal authorized user
  • 原文地址:https://www.cnblogs.com/linruier/p/9978793.html
Copyright © 2020-2023  润新知