青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Google code jam Round1B

Posted on 2010-05-25 23:29 rikisand 閱讀(386) 評論(0)  編輯 收藏 引用

A 簡單的模擬 ,不過我寫的很麻煩

Problem

On Unix computers, data is stored in directories. There is one root directory, and this might have several directories contained inside of it, each with different names. These directories might have even more directories contained inside of them, and so on.

A directory is uniquely identified by its name and its parent directory (the directory it is directly contained in). This is usually encoded in a path, which consists of several parts each preceded by a forward slash ('/'). The final part is the name of the directory, and everything else gives the path of its parent directory. For example, consider the path:

/home/gcj/finals
This refers to the directory with name "finals" in the directory described by "/home/gcj", which in turn refers to the directory with name "gcj" in the directory described by the path "/home". In this path, there is only one part, which means it refers to the directory with the name "home" in the root directory.

To create a directory, you can use the mkdir command. You specify a path, and thenmkdir will create the directory described by that path, but only if the parent directory already exists. For example, if you wanted to create the "/home/gcj/finals" and "/home/gcj/quals" directories from scratch, you would need four commands:

mkdir /home
mkdir /home/gcj
mkdir /home/gcj/finals
mkdir /home/gcj/quals

Given the full set of directories already existing on your computer, and a set of new directories you want to create if they do not already exist, how many mkdir commands do you need to use?

Input

The first line of the input gives the number of test cases, T. T test cases follow. Each case begins with a line containing two integers N and M, separated by a space.

The next N lines each give the path of one directory that already exists on your computer. This list will include every directory already on your computer other than the root directory. (The root directory is on every computer, so there is no need to list it explicitly.)

The next M lines each give the path of one directory that you want to create.

Each of the paths in the input is formatted as in the problem statement above. Specifically, a path consists of one or more lower-case alpha-numeric strings (i.e., strings containing only the symbols 'a'-'z' and '0'-'9'), each preceded by a single forward slash. These alpha-numeric strings are never empty.

Output

For each test case, output one line containing "Case #x: y", where x is the case number (starting from 1) and y is the number of mkdir you need.

Limits

1 ≤ T ≤ 100.
No path will have more than 100 characters in it.
No path will appear twice in the list of directories already on your computer, or in the list of directories you wish to create. A path may appear once in both lists however. (See example case #2 below).
If a directory is listed as being on your computer, then its parent directory will also be listed, unless the parent is the root directory.
The input file will be no longer than 100,000 bytes in total.

Small dataset

0 ≤ N ≤ 10.
1 ≤ M ≤ 10.

Large dataset

0 ≤ N ≤ 100.
1 ≤ M ≤ 100.

Sample

Input
Output

3
0 2
/home/gcj/finals
/home/gcj/quals
2 1
/chicken
/chicken/egg
/chicken
1 3
/a
/a/b
/a/c
/b/b

Gluk的解法:

 set <string> S;
        REP (i, n)
        {
            string s;
            cin >> s;
            S.insert(s);//已有的路徑用set表示
        }

        int res =0 ;

        REP (i, m)
        {
            string s;
            cin >> s;
            vector <string> ss;
            REP (j, s.size())
                if(s[j] == '/')
                    s[j] = ' ';//用空格替換’/’,然后使用istringstream分隔各級目錄
            istringstream iss (s);
            while (iss >> s) {
                ss.pb (s);
            }

            s = "";
            REP (i, ss.size ())
            {
                s = s+"/"+ss[i];
                if (S.find(s) == S.end())//依次加入各級目錄,/a  /a/b  /a/b/c 增加遞增的所有目錄
                {
                    res ++;
                    S.insert(s);
                }
            }
        }
題目中的這一句
If a directory is listed as being on your computer, then its parent directory will also be listed, unless the parent is the root directory.
告訴我們如果/a/b被list存在,那么/a也一定被list出來了 ,所以上面代碼可以不去分隔處理已經給出的目錄
yuhch123的解法
struct node {
   map <string, node *> sons;//每個節點,用map實現兒子節點
};
node *root;//一個根節點
int T;
int N, M;
char tmp[100005];
int ans = 0;
void insert(node *cnt, char *tmp) {//在節點cnt處,插入tmp子樹
   int i;
   if (tmp[0] == 0)//為空則返回
      return;
   assert(tmp[0] == '/');
   string str;
   for (i = 1; tmp[i] != '/' && tmp[i] != 0; i ++)//第一層
      str += tmp[i];
   if (cnt -> sons.find(str) == cnt -> sons.end()) {//如果沒有這子樹,則創建子樹
      ans ++;//需要一次mkdir 
      struct node *tmp2 = new node();
      cnt -> sons[str] = tmp2;
   }
   insert(cnt -> sons[str], tmp + i);// 遞歸創建子樹
}
int main() {
   int i;
   int Case = 1;
   scanf("%d", &T);
   while (T --) {
      scanf("%d%d", &N, &M);
      root = new node();
      for (i = 0; i < N; i ++) {
     scanf("%s", tmp);
     insert(root, tmp);
      }
      ans = 0;
      for (i = 0; i < M; i ++) {
     scanf("%s", tmp);
     insert(root, tmp);
      }
      printf("Case #%d: %d\n", Case ++, ans);
   }
   return 0;
}
neal.wu的解法
vector <string> parse (string s)
{
    vector <string> v;
    string next = "";
    
    for (int i = 0; i < (int) s.length (); i++)
    {
        next += s [i];
        
        if (i + 1 == (int) s.length () || s [i + 1] == '/')
        {
            v.push_back (next);
            next = "";
        }
    }
    
    return v;
}

set <string> direc;

int insert (vector <string> v)
{
    int count = 0;
    string s = "";
    
    for (int i = 0; i < (int) v.size (); i++)
    {
        s += v [i];
        count += direc.insert (s).second ? 1 : 0; //set返回一個pair<iterator,bool> bool指示插入是否成功   
 }
    
    return count;
}

int main ()
{
             freopen("d:\\input.txt","r",stdin);
  
    for (scanf ("%d", &T); TC <= T; TC++)
    {
        scanf ("%d %d", &N, &M);
        direc.clear ();
        int make = 0;
        char str [1000];
        
        for (int i = 0; i < N; i++)
        {
            do gets (str); while (strlen (str) == 0);//do gets 過濾回車空字符串
            insert (parse (str));
        }
        
        for (int i = 0; i < M; i++)
        {
            do gets (str); while (strlen (str) == 0);
            make += insert (parse (str));
        }
        
        printf ("Case #%d: %d\n", TC, make);
    }
    
    //system ("pause");
    return 0;
}
ploh的解法:
int main(void)
{freopen("d:\\input.txt","r",stdin);
  int T; cin >> T;
  for (int t = 1; t <= T; t++) {
    int ans = 0;
    set <string> have, want;
    int N, M;
    cin >> N >> M;
    for (int i = 0; i < N; i++) {
      string path; cin >> path;
      have.insert(path);
    }
    for (int i = 0; i < M; i++) {//用一個set保存所有需要加入的
      string path; cin >> path;
      want.insert(path);
      for (int j = 1; j < path.length(); j++)
    if (path[j] == '/')
      want.insert(path.substr(0, j));
    }
    for (set <string>::iterator it = want.begin(); it != want.end(); it++)//遍歷所有需要加入的,然后看是否存在
      if (!have.count(*it))
    ans++;
    printf("Case #%d: %d\n", t, ans);
  }
}


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久中文字幕一区| 噜噜噜91成人网| 国产日产精品一区二区三区四区的观看方式| 久久不射2019中文字幕| 亚洲欧美视频在线| 欧美在线不卡| 久久久久国产一区二区三区| 久久免费的精品国产v∧| 欧美与黑人午夜性猛交久久久| 亚洲在线电影| 新狼窝色av性久久久久久| 午夜视频在线观看一区二区三区| 欧美在线视频观看| 蜜桃精品一区二区三区| 欧美国产日产韩国视频| 欧美日韩二区三区| 国产精品推荐精品| 精品99一区二区三区| 日韩视频永久免费| 午夜精品久久久久久久白皮肤 | 日韩视频中午一区| 亚洲欧美日本日韩| 男同欧美伦乱| 一区二区三区中文在线观看| 亚洲国产色一区| 亚洲一区在线观看视频| 久久电影一区| 亚洲高清在线视频| 一区二区久久久久| 久久亚洲精品伦理| 国产精品久线观看视频| 在线观看欧美黄色| 亚洲欧美卡通另类91av| 欧美顶级少妇做爰| 亚洲欧美综合v| 欧美精品1区2区| 国产日韩高清一区二区三区在线| 亚洲日本视频| 久久蜜桃资源一区二区老牛| 日韩一区二区久久| 欧美96在线丨欧| 国产专区一区| 亚洲欧美日本在线| 一本色道88久久加勒比精品| 麻豆精品视频| 国产亚洲欧美日韩日本| 亚洲性人人天天夜夜摸| 亚洲福利在线观看| 久久久久国产精品麻豆ai换脸| 欧美视频在线不卡| 日韩一二三区视频| 亚洲激情在线观看视频免费| 欧美在线视频一区| 国产欧美综合一区二区三区| 在线视频精品一| 亚洲国产日韩欧美在线图片| 久久久五月天| 在线播放国产一区中文字幕剧情欧美| 欧美精品一区二区视频| 欧美一区二区视频在线观看2020| 欧美绝品在线观看成人午夜影视| 樱桃成人精品视频在线播放| 久久国产日韩| 欧美一区二区精品| 国内精品久久久久影院 日本资源| 香蕉乱码成人久久天堂爱免费| 亚洲美女黄网| 欧美日韩在线三级| 亚洲特级片在线| 欧美.日韩.国产.一区.二区| 美女精品一区| 亚洲精品1区| 亚洲国产日韩在线一区模特| 女仆av观看一区| 99精品国产热久久91蜜凸| 最新中文字幕亚洲| 欧美午夜精品久久久久久孕妇| 亚洲精品美女在线| 一区二区精品国产| 国产一区二区精品久久| 久久午夜电影| 欧美大尺度在线| 欧美高清一区二区| 亚洲最新在线视频| 亚洲神马久久| 经典三级久久| 日韩视频中文| 国产一区在线视频| 亚洲电影专区| 国产精品日日摸夜夜摸av| 久久精品亚洲一区| 欧美激情四色 | 狠狠色噜噜狠狠狠狠色吗综合| 久久蜜桃资源一区二区老牛| 欧美黄色成人网| 久久精品中文字幕一区二区三区| 久久精品主播| 亚洲午夜精品视频| 久久激情综合| aa国产精品| 久久精品夜夜夜夜久久| 亚洲美女视频网| 午夜精品视频网站| 99re6这里只有精品| 亚洲尤物在线| 99pao成人国产永久免费视频| 亚洲综合视频网| 亚洲伦理一区| 久久精品综合网| 午夜亚洲一区| 欧美日韩国产二区| 蜜臀va亚洲va欧美va天堂| 国产精品久久9| 亚洲黄色影片| 亚洲第一中文字幕| 欧美一区二区三区四区夜夜大片| 一本大道av伊人久久综合| 久久夜色精品国产欧美乱极品| 午夜精品理论片| 99在线视频精品| 久久久久久久久久久一区| 欧美日韩国产一区二区三区| 欧美aaaaaaaa牛牛影院| 国产欧美日韩一区二区三区在线| 亚洲精品日韩一| 亚洲国产色一区| 麻豆91精品| 免费在线观看一区二区| 国产亚洲福利社区一区| 亚洲天堂成人在线视频| 99国产精品久久久久久久久久| 麻豆9191精品国产| 欧美成人午夜免费视在线看片| 国产一区二区久久| 小处雏高清一区二区三区| 性欧美xxxx大乳国产app| 欧美午夜欧美| 亚洲午夜视频在线观看| 亚洲欧美国产精品桃花| 国产精品v欧美精品v日本精品动漫 | 国产日韩一区| 亚洲欧美文学| 午夜精品视频在线观看一区二区| 欧美精品久久久久久久久老牛影院| 欧美国产欧美综合| 亚洲国产精品专区久久| 免费视频一区| 亚洲黄色在线观看| 99热在线精品观看| 欧美日韩一区不卡| 亚洲美女在线观看| 亚洲欧美成人一区二区在线电影 | 亚洲黄色免费| 亚洲美女区一区| 欧美视频日韩视频| 亚洲欧美在线播放| 久久人人97超碰精品888| 国产在线高清精品| 卡一卡二国产精品| 亚洲精品美女在线观看| 中国日韩欧美久久久久久久久| 欧美性jizz18性欧美| 亚洲欧美自拍偷拍| 欧美高清不卡在线| 日韩一级在线观看| 国产精品毛片大码女人| 欧美一区二区在线免费观看| 欧美+亚洲+精品+三区| 亚洲精品日韩在线| 国产精品美女在线| 久久久久久久国产| 亚洲精品视频在线| 久久久91精品国产| 91久久精品日日躁夜夜躁国产| 欧美日韩中文字幕日韩欧美| 欧美中文在线观看| 亚洲精品国产视频| 久久久亚洲国产天美传媒修理工 | 欧美一区二区视频97| 在线亚洲免费| 在线观看福利一区| 麻豆成人在线观看| 久久久国产精品一区| 亚洲高清资源| 国产精品久久| 另类尿喷潮videofree| 一本一本大道香蕉久在线精品| 久久嫩草精品久久久久| 一区二区日本视频| 亚洲国产高清在线| 国产欧美精品一区| 欧美日韩福利视频| 美女视频黄a大片欧美| 亚洲欧美国产毛片在线| 亚洲精品乱码久久久久久蜜桃91| 久久五月激情| 久久精品国产亚洲aⅴ| 亚洲一区免费| 9色精品在线| 99精品欧美|