zoukankan      html  css  js  c++  java
  • 【HDOJ】1648 Keywords

    PE的注意,如果没有满足条件的不输出空格。
    简单模拟,暴力解。

      1 /*  */
      2 #include <iostream>
      3 #include <sstream>
      4 #include <string>
      5 #include <map>
      6 #include <queue>
      7 #include <set>
      8 #include <stack>
      9 #include <vector>
     10 #include <deque>
     11 #include <bitset>
     12 #include <algorithm>
     13 #include <cstdio>
     14 #include <cmath>
     15 #include <ctime>
     16 #include <cstring>
     17 #include <climits>
     18 #include <cctype>
     19 #include <cassert>
     20 #include <functional>
     21 #include <iterator>
     22 #include <iomanip>
     23 using namespace std;
     24 //#pragma comment(linker,"/STACK:102400000,1024000")
     25 
     26 #define sti                set<int>
     27 #define stpii            set<pair<int, int> >
     28 #define mpii            map<int,int>
     29 #define vi                vector<int>
     30 #define pii                pair<int,int>
     31 #define vpii            vector<pair<int,int> >
     32 #define rep(i, a, n)     for (int i=a;i<n;++i)
     33 #define per(i, a, n)     for (int i=n-1;i>=a;--i)
     34 #define clr                clear
     35 #define pb                 push_back
     36 #define mp                 make_pair
     37 #define fir                first
     38 #define sec                second
     39 #define all(x)             (x).begin(),(x).end()
     40 #define SZ(x)             ((int)(x).size())
     41 #define lson            l, mid, rt<<1
     42 #define rson            mid+1, r, rt<<1|1
     43 
     44 // #define DEBUG
     45 
     46 const int maxp = 55;
     47 const int maxt = 255;
     48 const int maxl = 255;
     49 const int maxn = 305;
     50 const int INF = 0x3f3f3f3f;
     51 int M[maxn], mn;
     52 int M_[maxn], mn_;
     53 map<string,int> tb;
     54 map<string,int>::iterator iter;
     55 int wc = 0, pn = 1, tn = 1;
     56 char s[maxl];
     57 
     58 typedef struct {
     59     int l;
     60     char s[maxl];
     61 
     62     void init() {
     63         int id;
     64         int len = strlen(s);
     65         int i = 0, j;
     66 
     67         mn = 0;
     68         while (i < len) {
     69             if (isspace(s[i])) {
     70                 ++i;
     71                 continue;
     72             }
     73             j = i;
     74             while (i<len && islower(s[i]))
     75                 ++i;
     76             s[i] = '';
     77             #ifdef DEBUG
     78                 printf("	%s
    ", s+j);
     79             #endif
     80             string str(s+j);
     81             iter = tb.find(str);
     82             if (iter == tb.end()) {
     83                 id = tb[str] = wc++;
     84             } else {
     85                 id = iter->sec;
     86             }
     87 
     88             M[mn++] = id;
     89             s[i] = ' ';
     90         }
     91 
     92         M[mn] = INF;
     93     }
     94 
     95 } profile_t;
     96 
     97 typedef struct {
     98     int a[maxn];
     99     int sz;
    100 } tile_t;
    101 
    102 profile_t P[maxp];
    103 tile_t T[maxt];
    104 
    105 void input_profile() {
    106     scanf("%d", &P[pn].l);
    107     gets(P[pn].s);
    108     // getchar();
    109     ++pn;
    110 }
    111 
    112 void input_tile() {
    113     int l = 0, id;
    114     char ch;
    115 
    116     #ifdef DEBUG
    117         printf("%d:
    ", tn);
    118     #endif
    119 
    120     while (1) {
    121         while (1) {
    122             ch = getchar();
    123             if (isspace(ch))
    124                 continue;
    125             else
    126                 break;
    127         }
    128 
    129         if (ch == '|')
    130             break;
    131 
    132         // have a word
    133         l = 0;
    134         while (1) {
    135             if (isalpha(ch)) {
    136                 if (isupper(ch))
    137                     ch = ch - 'A' + 'a';
    138                 s[l++] = ch;
    139             } else if (isspace(ch) || ch=='|') {
    140                 if (l) {
    141                     s[l] = '';
    142                     #ifdef DEBUG
    143                         printf("	%s
    ", s);
    144                     #endif
    145                     string str(s);
    146                     iter = tb.find(str);
    147                     if (iter == tb.end()) {
    148                         id = tb[str] = wc++;
    149                     } else {
    150                         id = iter->sec;
    151                     }
    152                     T[tn].a[T[tn].sz++] = id;
    153                     l = 0;
    154                 }
    155                 break;
    156             }
    157 
    158             ch = getchar();
    159         }
    160 
    161         if (ch == '|') {
    162             getchar();
    163             break;
    164         }
    165     }
    166 
    167     ++tn;
    168 }
    169 
    170 bool judge(int pid, int tid) {
    171     int l = P[pid].l + 1;
    172     int sz = T[tid].sz;
    173 
    174     // sort(M, M+mn);
    175     
    176     int tmp;
    177     rep(i, 0, mn) {
    178         rep(j, 0, mn) {
    179             if (i == j)
    180                 continue;
    181             tmp = INF;
    182             rep(ii, 0, sz) {
    183                 if (T[tid].a[ii] != M[i])
    184                     continue;
    185                 rep(jj, 0, sz) {
    186                     if (jj==ii || T[tid].a[jj]!=M[j])
    187                         continue;
    188                     tmp = min(tmp, abs(jj-ii));
    189                 }
    190             }
    191 
    192             if (tmp <= l)
    193                 return true;
    194         }
    195     }
    196 
    197     return false;
    198 }
    199 
    200 void solve_(int pid) {
    201     int c = 0;
    202 
    203     printf("%d:", pid);
    204 
    205     P[pid].init();
    206     rep(tid, 1, tn) {
    207         if (judge(pid, tid)) {
    208             if (c++)
    209                 putchar(',');
    210             else
    211                 putchar(' ');
    212             printf("%d", tid);
    213         }
    214     }
    215 
    216 
    217     putchar('
    ');
    218 }
    219 
    220 void solve() {
    221     rep(i, 1, pn)
    222         solve_(i);
    223 }
    224 
    225 int main() {
    226     ios::sync_with_stdio(false);
    227     #ifndef ONLINE_JUDGE
    228         freopen("data.in", "r", stdin);
    229         freopen("data.out", "w", stdout);
    230     #endif
    231 
    232     char ch;
    233 
    234     while (1) {
    235         ch = getchar();
    236         if (ch == '#')
    237             break;
    238         getchar();
    239         if (ch == 'P') {
    240             input_profile();
    241         } else {
    242             input_tile();
    243         }
    244     }
    245 
    246     solve();
    247 
    248     #ifndef ONLINE_JUDGE
    249         printf("time = %d.
    ", (int)clock());
    250     #endif
    251 
    252     return 0;
    253 }

    数据发生器。

      1 import sys
      2 import string
      3 from random import randint
      4 
      5 def GenWords(n = 20):
      6     ret = []
      7     lc = list(string.lowercase)
      8     llc = len(lc) - 1
      9     for i in xrange(n):
     10         length = randint(2, 5)
     11         word = ""
     12         for j in xrange(length):
     13             idx = randint(0, llc)
     14             word += lc[idx]
     15         ret.append( word )
     16     return ret
     17 
     18     
     19 def GenWord(word):
     20     op = "!#$%^&*()023+-"
     21     lop = len(op) - 1
     22     ret = ""
     23     for i in xrange(len(word)):
     24         k = randint(0, 100)
     25         if k%4 == 0:
     26             idx = randint(0, lop)
     27             ret += op[idx]
     28         if k%4 == 1:
     29             ret += word[i].upper()
     30         else:
     31             ret += word[i]
     32     return ret
     33     
     34     
     35 def GenSpace():
     36     op = " 	"
     37     length = randint(1, 3)
     38     ret = ""
     39     for i in xrange(length):
     40         k = randint(0, 1)
     41         ret += op[k]
     42     return ret
     43     
     44     
     45 def GenTile(wordList):
     46     lw = len(wordList) - 1
     47     ret = "T: "
     48     nline = randint(1, 5)
     49     lines = []
     50     for i in xrange(nline):
     51         nword = randint(2, 10)
     52         line = ""
     53         for i in xrange(nword):
     54             line += GenSpace()
     55             idx = randint(0, lw)
     56             line += GenWord(wordList[idx])
     57         lines.append(line)
     58     ret = ret + "
    ".join(lines) + "|"
     59     return ret
     60 
     61     
     62 def GenPile(wordList):
     63     lw = len(wordList) - 1
     64     ret = "P: "
     65     k = randint(0, 10)
     66     ret += " %d" % k
     67     nword = randint(2, 10)
     68     for i in xrange(nword):
     69         ret += GenSpace()
     70         idx = randint(0, lw)
     71         ret += wordList[idx]
     72     return ret
     73     
     74 
     75 def GenData(fileName):
     76     wordList = GenWords()
     77     lw = len(wordList) - 1
     78     with open(fileName, "w") as fout:
     79         pn = randint(10, 20)
     80         tn = randint(10, 30)
     81         for i in xrange(pn):
     82             line = GenPile(wordList)
     83             fout.write("%s
    " % line)
     84         for i in xrange(tn):
     85             line = GenTile(wordList)
     86             fout.write("%s
    " % line)    
     87         fout.write("#
    ")
     88         
     89         
     90 def MovData(srcFileName, desFileName):
     91     with open(srcFileName, "r") as fin:
     92         lines = fin.readlines()
     93     with open(desFileName, "w") as fout:
     94         fout.write("".join(lines))
     95 
     96         
     97 def CompData():
     98     print "comp"
     99     srcFileName = "F:Qt_prjhdojdata.out"
    100     desFileName = "F:workspacecpp_hdojdata.out"
    101     srcLines = []
    102     desLines = []
    103     with open(srcFileName, "r") as fin:
    104         srcLines = fin.readlines()
    105     with open(desFileName, "r") as fin:
    106         desLines = fin.readlines()
    107     n = min(len(srcLines), len(desLines))-1
    108     for i in xrange(n):
    109         ans2 = int(desLines[i])
    110         ans1 = int(srcLines[i])
    111         if ans1 > ans2:
    112             print "%d: wrong" % i
    113 
    114             
    115 if __name__ == "__main__":
    116     srcFileName = "F:Qt_prjhdojdata.in"
    117     desFileName = "F:workspacecpp_hdojdata.in"
    118     GenData(srcFileName)
    119     MovData(srcFileName, desFileName)
    120     
    121     
  • 相关阅读:
    SMO学习笔记(五)——附加数据库
    SMO学习笔记(二)——还原(恢复)篇之完整恢复
    加深C# 中字符串前加@符号理解以及使用~~
    Oracle Sys用户用默认密码change_on_install 无法登录的问题(错误代码:ORA28009)
    Reflector for .NET 下载问题
    SQLSERVER拆分字符串的函数(表值函数)
    AjaxPro使用Session出错(AjaxPro "Session"引发了"System.NullReferenceException"类型的异常)
    ASP.NET Web页面(.aspx)添加用户控件(.ascx)无显示的问题
    公积金贷款与商业贷款的区别(在废打印纸中的意外收获... :))
    SMO学习笔记(三)——效验数据库备份文件
  • 原文地址:https://www.cnblogs.com/bombe1013/p/5136241.html
Copyright © 2011-2022 走看看