本书重假如讲框架内的翻新,所谓框架内,就是通过身边的资源来找到改进的素材,很多时候,立异往往来自于向内求,而不是向外求。作者认为,最好的更新就是从身边去找寻。

Time Limit: 10 Sec  Memory
Limit: 128 MB
Submit: 735  Solved: 102
[Submit][Status][Discuss]

       
革新分三种,分别是观念立异和微立异。传统改进,强调跳出框架,利用粗放思维去探寻改进的主旨,相比较常用的点子就是“头脑风暴”。但这种发散式的更新,其实是有问题的。一是效率低下。二是效益不优美。效用低是因为要找很五个人来建议意见,但最好采访意见的法子,是要有例外背景的人,效果才好。正如世界世界二战时英国破解德意志联邦共和国密码时,图灵在布莱切利庄园时,都是部分两样领域的人,只有这么才会有所突破。但我们具体工作中,要找到不同背景的人,太难实施。据总结,通过“头脑风暴”得出的定论,其实跟一个人想出的效率差不多。正是这两个原因,作者不觉得价值观的分流革新点子可行。所以,作者指出微改进的争鸣。这种革新,恰恰跟传统的更新点子相反,它所追求的是非发散式。此外,作者认为,那种微革新的能力,其实每个人都得以习得,并非天赋,只是一种技术,什么人都能学会。但能学会的前提是在框架内革新,其实有套路的,只要依照作者提出的几个模式就足以。

Description

给你一个字符集合,你从中间找出一部分字符串出来.
希望您找出来的这多少个字符串的最长公共前缀*字符串的总个数最大化.

       
既然微立异什么人都能学会,但为什么许三个人学不会?紧要原因是:思维定势。也就是说一般人被习惯的永恒固定了思维,作者称这种情景叫“固着”。我们只有跳出这种固着,才足以消除那种考虑从来。对策是再一次审视你要解决的题材。用一个新的意见去对待要改进的东西。举个简单的例子,当年美利坚同盟国和苏联竞争太空技术,后来美利坚联邦合众国人阅览苏联航天员可以在满天写字,觉得很意外,他们经过咋样技术解决,在一直不大气压力的图景下写出“钢笔”字?他们数学家经过大量商讨,依旧没有缓解方案。最后他们发觉:原来苏联人只是用了铅笔。美国人何以总是想着钢笔呢?这就是人的考虑定势,假诺没有排除这种稳定,只会把题目越搞越复杂。还有此外一个例证,从前深圳一场大雨,一位女驾驶员的汽车被淹在天桥的隧道,最后死在车里。重要原因是汽车熄火,不可能起动发动机,无法开拓车门和车窗,最后女驾驶员憋死在车内。其实这位女驾驶员直接认为,汽车是用来开的,思维一贯。但其实,座驾头枕架,可以拆下,从而自救。我们自然地看待某事物,这导致大家不可以用新的见识看待革新这件事。

Input

首先行提交数字N.N在[2,1000000] 下边N行描述那多少个字符串,长度不超过20000
。保证输入文件不超越10MB

       
其实,立异有五个趋势。一是从问题到答案。二是从答案到题目。从问题到答案是观念方向,大家首发现存在的问题,或者用户的痛点,再来想办法。其实大家可以反着来,先思考我们做出来的事物,能用在哪个地方?这种先从答案再到题目标换代方向,作者称之为“先情势后效果”的条件。你要做的是想办法先找到或想到大量的新意,只有当创意十足多时,才有采用的退路。所以,当您想到相比较好的新意后,想想这些创意,能用在哪儿?我举个例证,从前有人发明了一种物质,随着温度不同,会变不同的颜色。这些发明有咋样用吗?最后他们运用到检测奶瓶温度上,让二姨省心,因为小宝宝冲奶的热度要适用。这就是“先模式”(可变色),“后效果”(用在奶瓶)的例证。我们也听过3M集团的有利贴吧?这一个产品只是一场“意外”,他们当然想做强力粘贴的,但这是一个“失利”的成品,因粘性太弱,不切合公司要求。但有人就想想,这些“粘性很弱”的事物,有怎么着市场机遇吗?结果,全球流行的“3M便利帖”就涌出了。太多类似的例证,如当场百事可乐集团,其实想做止咳水的,又是一个“失败”的成品,最终却变成了前天的Coca Cola饮料。所以,大家要爱惜每个创意,想想这么些创意,是否有另外新用处,革新往往来自这种微小的观测,只要你改变一下对待问题的角度。

Output

 a single line with an integer representing the maximal level of
complexity Lc(T).

        现在我们讲下微改进的章程。重要有5个点子,大家分三大类。如下:

Sample Input

7
Jora de Sus
Orhei
Jora de Mijloc
Joreni
Jora de Jos
Japca
Orheiul Vechi

       
第一类,元素改造。方法有3个,分别是减法策略、除法策略和乘法策略。这3个政策,都务求:1)先列出组件的组合,看看一个事物由多少有些组成;2)删除或复制某有些;3)想想删除或复制后的成品形态;4)思考那个新东西是否有价值?5)思考方向。只要服从这些手续。就足以应用好这多少个因素改造的主意。以耳麦为例,先列出动圈耳机的三结合,它们各自有“听筒”、“话筒”、“接线头”。我们只要删除“接线头”,再思索固然一个不曾接线头的耳麦什么效劳?想想借使用蓝牙是否行得通?之后,你思考一个用蓝牙连接代替“接线头”的新动圈耳机。再进一步想,如若“听筒”去掉,是否就变成了“迈克(Mike)风”?再举个例子,我们都精通博客,但博客是以长著作的格局,太正统,门槛太高。后来,有人思考,能否限制著作长度,把文字限定在140个字?有时候限制,反而是好事,让用户使用的秘诀变低,不管您是我们,依旧小人物,他们中间的差距就是140个字的区别。以上就是减法策略的有些例子。我们加以一下除法策略,那多少个跟减法策略很像,但除法策略,更干净。它可能就把某部部分,单独变成一个新产品。如飞机自助值班机,就是把原来柜台购票的功效,做成一个独立产品,跟原来主体(柜台)分离,创制新的东西。那个略带跟ATM机类似,它把本来银行的“取和存”的政工,完全分开,做成新产品ATM。乘法策略,恰恰相反,它是把某部部件复制更多,如车子,咱们只要再复制六个轮子,有哪些功能?这不变成了小孩子学骑单车了呢?一个电视机镜头,再多一个镜头,有如何听从?不就改为“画中画”效用了啊?诸如此类,你可以发现许多翻新的地方。

Sample Output

24

       
第二类,找新用途。步骤如下:1)列出上下部元素(注:这里包括外部因素);2)给某个部件新用处;3)思考新产品的用处;4)是否有潜在优势;5)是否管用。例如,滑轮和李行箱组合,就成为滑轮式李行箱。滑轮与李行箱,本身是六个不等的出品,组合在一齐,就可找到新用处。此外,电话和打印机组合,就变传真机。我们要找到新用处,以传真机为例。你要问自己,打印机,只可以用来打印文件吗?是否可构成其他产品用?从而思考出它的新用处。此前有这般一个试行,给受试者一盒图钉和一支蜡烛,问受试者咋样把蜡烛靠在墙上,结果不少人并未想到办法。原因他们以为那一盒图钉只是“图钉”,被界定在原有的研商中,假如你跳出来想:“难道这盒图钉,只可以当图钉用呢?”,答案明了不肯定。其实,你能够把图钉倒出来,变成一个空的盒子,盒子本身就是一个帮忙的“托架”,就足以用多余的图钉把盒子钉在墙上,蜡烛就可以动用这一个“托盘”。

HINT

 

这题有毒啊,,

思路和算法没什么好说的,

就是建一棵字典树,总括好深度和个数,然后乘起来,取最大值

但是!!!

本蒟蒻一起来写的无限RE

图片 1图片 2

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int n,sz=1,ans;
 6 string ch;
 7 int a[500001][53],f[500001];
 8 void insert()
 9 {
10     int l=ch.length(),now=0;
11     for(int i=0;i<l;i++)
12     {
13         int t;
14         if(ch[i]==' ')t=52;
15         else if(ch[i]<='Z')t=ch[i]-'A';
16         else t=ch[i]-'a'+26;
17         if(a[now][t])now=a[now][t];
18         else now=a[now][t]=++sz;
19         f[now]++;
20         ans=max(ans,f[now]*(i+1));
21     }
22 }
23 int main()
24 {
25     scanf("%d",&n);
26     for(int i=1;i<=n;i++)
27     {
28        getline(cin,ch);
29        insert();
30     }
31     printf("%d",ans);
32     return 0;
33 }

RE

后来听人家说这题卡内存,

于是我换成了前向星储存,

然后,

无限TLE,

加了各种常数优化如故无限TLE

 

图片 3图片 4

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<algorithm>
 7 #include<queue>
 8 using namespace std;
 9 const int MAXN=1001;
10 inline void read(int &n)
11 {
12     char c='+';bool flag=0;n=0;
13     while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
14     while(c>='0'&&c<='9')n=n*10+c-48,c=getchar();
15 }
16 struct E
17 {
18     int u,v,nxt;
19 }edge[MAXN];
20 int head[MAXN];
21 int num=1;
22 struct node
23 {
24     int bh;
25     int num;
26     int val;
27     node(){num=0;val=0;}
28 }trie[MAXN];
29 int tot=0;
30 char a[MAXN];
31 bool vis[MAXN];
32 inline void add_edge(int x,int y)
33 {
34     edge[num].u=x;
35     edge[num].v=y;
36     edge[num].nxt=head[x];
37     head[x]=num++;
38 }
39 long long int ans=0;
40 inline void insert(char *a)
41 {
42     int l=strlen(a);int now=0;
43     for(register int i=0;i<l;i++)
44     {
45         bool flag=0;
46         int debug=a[i];
47         for(register int j=head[now];j!=-1;j=edge[j].nxt)
48         {
49             if(trie[edge[j].v].val==a[i])
50                 trie[edge[j].v].num++,
51                 flag=1,
52                 now=edge[j].v;
53         }
54         if(flag==0)
55             {
56                 trie[++tot].bh=tot;
57                 trie[tot].num=1;
58                 trie[tot].val=a[i];
59                 add_edge(now,tot);
60                 now=tot;
61             }
62         ans=max(ans,(long long )(i+1)*trie[now].num);
63     }
64 }
65 int main()
66 {
67     memset(head,-1,sizeof(head));
68     int n;
69     read(n);
70     for(int i=1;i<=n;i++)
71     {
72         memset(a,0,sizeof(a));int hh=0;
73         char ch=getchar();bool flag2=0;
74         while(ch=='\n')    ch=getchar();     
75         while(ch!='\n')
76             a[hh++]=ch,ch=getchar();    
77         insert(a);    
78     }
79     printf("%lld",ans);
80     return 0;
81 }

TLE

 

接下来不得不参考此外大神的代码…….

编译速度就秒杀我的代码。。。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define N 5000010
 5 using namespace std;
 6 int tot = 1 , head[N] , to[N] , next[N] , cnt , si[N];
 7 char val[N];
 8 void add(int x , int y , char c)
 9 {
10     to[++cnt] = y , val[cnt] = c , next[cnt] = head[x] , head[x] = cnt;
11 }
12 int main()
13 {
14     int n , i , j , k , t , p;
15     char ch;
16     long long ans = 0;
17     scanf("%d" , &n);
18     for(i = 1 ; i <= n ; i ++ )
19     {
20         ch = getchar();
21         while(ch == '\n') ch = getchar();
22         for(j = t = 1 ; ch != '\n' ; j ++ , ch = getchar())
23         {
24             for(p = 0 , k = head[t] ; k ; k = next[k])
25             {
26                 if(val[k] == ch)
27                 {
28                     p = to[k];
29                     break;
30                 }
31             }
32             if(!p) add(t , p = ++tot , ch);
33             t = p , si[t] ++ , ans = max(ans , (long long)j * si[t]);
34         }
35     }
36     printf("%lld\n" , ans);
37     return 0;
38 }

 

       
第三类,建立新关系。像下面说到的变脸奶瓶就是一个例子,本身“变色”与“牛奶”没有此外关系的,在改进时,可以考虑两种甚至多种本无关系的事物,能否通过某种关系,建立起一个全新的产品吗?我们也听过“白加黑”,也是这种立异。白色和褐色,本身并不代表白天和黑夜,但这么些产品通过这种交流,把它们与脑仁疼的使用境况结合越来,令人觉得很直观。