zoukankan      html  css  js  c++  java
  • HihoCoder

    题目链接

    题目大意

      略

    解题思路

      主要是说下坑点,比如这组数据:
       3
       /game/moba/dota2/a
       /game/moba/dota2/b
       /game/moba/dota2/c
      结果应该是
       /game-moba-dota2/a
       /game-moba-dota2/b
       /game-moba-dota2/c
      如果目录下只有单一目录但是文件有多个也要合并,还有就是有可能把第一个'/'写成'-'的可能,题目不难,主要是一些细节的东西。

    代码

    const int maxn = 5e5+10;
    const int maxm = 2e3+10;
    char s[39] = "0123456789abcdefghijklmnopqrstuvwxyz/";
    int trie[maxn][39], tot, num[256], n;
    string ss[maxn];
    void insert(string ss) {
    	int p = 0;
    	for (auto ch : ss) {
    		if (!trie[p][num[ch]]) trie[p][num[ch]] = ++tot;
    		p = trie[p][num[ch]];
    	}
    }
    void solve(string &ss) {
    	int p = 0, pre = 0, flag = 1, sz = ss.size();
    	for (int i = 0; i<sz; ++i) {
    		int cnt = 0;
    		if (i) {
    			for (int j = 0; j<39; ++j)
    				if (trie[p][j]) ++cnt;
    			if (cnt!=1) flag = 0;
    			if (ss[i]=='/') {
    				if (flag) ss[pre] = '-';
    				//cout << pre << endl;
    				flag = 1;
    				pre = i;
    			}
    		}
    		p = trie[p][num[ss[i]]];
    	}
    	ss[0] = '/';
    }
    int main() {
    	for (int i = 0; s[i]; ++i) num[s[i]] = i;
    	cin >> n;
    	for (int i = 1; i<=n; ++i) cin >> ss[i], insert(ss[i]);
    	for (int i = 1; i<=n; ++i) {
    		solve(ss[i]);
    		cout << ss[i] << endl;
    	}
    	return 0;	
    }
    
  • 相关阅读:
    .NE 学习概要
    (转)工作之路---记录LZ如何在两年半的时间内升为PM
    XP下Winform背景透明问题
    CSE(Corrupted State Exceptions) 严重异常处理办法
    (转)C#模拟键盘鼠标事件
    (转).net项目技术选型总结
    (转)MSMQ续
    (转)MSMQ(消息队列)
    (转)TCP三次握手
    Socket编程初探
  • 原文地址:https://www.cnblogs.com/shuitiangong/p/14420236.html
Copyright © 2011-2022 走看看