Gitignore(第 45 届ICPC区域赛上海站)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题意

文件同步(合并)

给你n个可以被忽略的目录,类似于 a/b/c/d 这样的文件夹或者model这样的文件,为gitignore,m个不能被忽略的这样的目录。如果一个文件夹里面不是所有的文件都能被忽略的话就不能忽略这个文件夹,否则可以直接忽略这个文件夹。

求最后至少需要多少个文件夹或文件才可以表示所有的文件夹或文件

思路

记录最初的个数ans=n

先对m个不可以被忽略的目录进行标记mp[]=1

在n个可以被忽略的目录中查找可以被忽略的有多少

如果mp[] = 1 ,在n个中查找的时候直接continue

如果mp[] = 0,就标记mp[]=2

如果mp[] = 2,就标记ans–(Because mp[]=2保留一个即可)

注意

在m个不可忽略的目录中的标记是标记某一个/前面的所有

例如:

data/test

标记的是mp[data]=1,mp[datatest]=1

代码

#include<stdio.h>
#include<string.h>
#include<map>
#include<algorithm>
using namespace std;
char a[1010][1010],b[1010][1010],c[1010],c1[1010];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        map<string,int>mp;
        int n,m;
        scanf("%d %d",&n,&m);
        for(int i=0;i<n;i++)
           scanf("%s",a[i]);
        for(int i=0;i<m;i++)
           scanf("%s",b[i]);
        int ans=n;
        for(int i=0;i<m;i++)
        {
            int l=strlen(b[i]);
            int k=0;
            for(int j=0;j<l;j++)
            {
                if(b[i][j]!='/')
                    c[k++]=b[i][j];
                else
                {
                    c[k]='\0';
                    mp[c]=1;
                }
            }
        }
        for(int i=0;i<n;i++)
        {
            int l=strlen(a[i]);
            int k1=0;
            for(int j=0;j<l;j++)
            {
                if(a[i][j]!='/')
                    c1[k1++]=a[i][j];
                else
                {
                    c1[k1]='\0';
                    if(mp[c1]==1)
                        continue;
                    else if(mp[c1]==0)
                        mp[c1]=2;
                    else if(mp[c1]==2)
                    {
                        ans--;
                        break;
                    }
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值