【两位良心出题人的北赛】 总结
啊啊啊。。。
为什么我还是觉得不良心= =
我垃圾咯。。。。。。。
题目真的!!!!好坑!!!!!!!
1、
( A) 梦回北平——外星人签到篇时间限制: 1.0s,空间限制: 256MB
Description:外星人时常想起,他在北平打 NBA 的时候无敌的往事,不禁感慨万分,讲完构造后他决定带着小伙伴回北平重游。正好 TF 驾车经过,将外星人和小伙伴带到了北平,外星人看着熟悉的北平,又想起无敌的往事,不禁热泪盈眶,正当他和小伙伴准备签到领分时,突然 alpha 狗跳出来,要和外星人决斗外星人转了转手, alpha 狗就怂了,决定还是智商对决。他们进行的是棋牌游戏,牌有花色和数字,花色分别为 H、 S、 C、 D(H =hearts, S = spades, C= clubs, D = diamonds),数字决定牌的大小,从大到小分别 为 A, K, Q, J, 10, 9, 8, 7, 6, 5, 4, 3, 2 , 分 值 分 别 为1,13,12,11,10,9,8,7,6,5,4,3,2 游戏有两轮,先手先出一张牌, 然后后手再出一张牌, 谁出的牌大谁就得到比较大的那张牌的分数, 如果相同那么先手赢, 这一回合赢的就是下一回合的先手,两人都按最优策略决策,现在外星人希望他的得分减 alpha 的得分最大化
Tips:第一轮外星人先出牌
Standard Input:
1
2H 5S
3C 4D
Standard Output:
1
贪心方法不可取,很容易错(像我一样)。。
打搜索吧骚年~~~
2、
求
我的莫比乌斯反演!!!!!!
本来应该70分的啊!!!!!推了一页白纸啊啊啊啊啊。。。竟然爆空间了,哭!!!!
写写我的式子:
ans=sigma D * sum (n/D,m/D)*sigma (i*mu[i]) [i|D]
设g[D]=sigma (i*mu[i]) [i|D] ,这是一个积性函数,可以筛出来。
于是就是O(n)的。。
正解没听懂ORZ。。
3、
【Description】 外星人打完 NBA 后, 想要减肥.. 他要控制自己的食欲.. 所以每当他吃糖的时候都会去思考一下糖的意义.. 有一天,外星人的同伙(同乡伙伴) 给他带来了好多好多的糖果,把这些糖果排成一排。 外星人惊奇的发现糖果有好多好多的颜色,有赤橙黄绿青蓝紫……还有外星人颜色 A、外星人 颜色 B、外星人颜色 C…… 反正我 tm 也丌知道这是什么颜色.. 看到这一排五彩缤纷的糖果,外星人十分激动,但是他又想起了他要减肥的事情,然后又 想起他自己是外星人:一种糖果只会让他胖一点!!!同种糖果吃再多也只会胖一点!!! 然后外星人就想知道如果吃某一段的糖果会胖多少点了..
6
1 2 3 4 3 5
3
1 2
3 5
2 6
【Sample Output】
24
等一下,做这题时我干了什么。。。
我直接莫队了。。。
当然不能全过的。。。
用树状数组维护就能过了ORZ...
然而如果强制在线我不造怎么办了!!!
哦。。。。GDXB说是主席树!!
4、
外星人想,等他瘦下来以后,他要向他一直稀饭的妹子们表白.. (↑开玩笑,你见过瘦下来的外星人??) 好.. 回归正题,外星人对他的妹子们有好多好多想说的,想说的话辣磨多! 每当外星人想到这里,他就迫丌及待的想给他的妹子们写封信,写封轰轰烈烈的表白信!!! 但是外星人实在是太懒了,连笔都懒得买,那怎么写呢?他看到他的桌上有一大堆的一模 一样的大文豪写的情诗(你可以认为有无限多),还有一把剪刀。然后他就想通过剪下中间的 句子来拼凑成他的表白信。
其中他的剪刀很神奇:
************* **************
*************** ************
1 次 1 次
然而外星人实在是太懒了,他甚至想剪的越少越好.. 亍是他找到了电脑室里最聪明的你,幵承诺只要你帮他他就告诉你他的妹子是谁。为了知 道他的妹子是谁,嗯,你知道该怎么做的..
【Sample Input】16 8
IAMWPH
ANDLOVEYOU
ILO VEYOU
【Sample Output】 2
【HINT】
样例解释: 我~好~久~没~有~见~过~这~么~简~单~的~题~了~【呵呵~~
对亍三个点的数据, n<=2000 m<=2000
对亍八个点的数据, n<=50000 m<=2000
对亍所有的数据, n<=1000000 m<=1000000
看错题again不说话。
就SAM就能过不说话。
其实我SAM打错并调不出来的几率是80%。
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 #include<cmath> 7 using namespace std; 8 #define INF 0xfffffff 9 #define Mod 1000000007 10 #define LL long long 11 #define Maxn 1000010 12 13 char s[Maxn]; 14 15 struct node 16 { 17 int son[30],pre,step; 18 }t[Maxn*2];int cnt=1; 19 int last=1; 20 21 void add(int l) 22 { 23 for(int i=0;i<l;i++) 24 { 25 int ind=s[i]-'A'+1; 26 int np=++cnt,p=last; 27 t[np].step=t[p].step+1; 28 while(p&&!t[p].son[ind]) t[p].son[ind]=np,p=t[p].pre; 29 if(!p) t[np].pre=1; 30 else 31 { 32 int q=t[p].son[ind]; 33 if(t[q].step==t[p].step+1) t[np].pre=q; 34 else 35 { 36 int nq=++cnt; 37 memcpy(t[nq].son,t[q].son,sizeof(t[nq].son)); 38 t[nq].step=t[p].step+1; 39 t[nq].pre=t[q].pre; 40 t[q].pre=t[np].pre=nq; 41 while(p&&t[p].son[ind]==q) 42 { 43 t[p].son[ind]=nq; 44 p=t[p].pre; 45 } 46 } 47 } 48 last=np; 49 } 50 } 51 52 int ans=0,now; 53 54 void ffind(int l) 55 { 56 for(int i=0;i<l;i++) 57 { 58 int ind=s[i]-'A'+1; 59 if(t[now].son[ind]) now=t[now].son[ind]; 60 else ans++,now=t[1].son[ind]; 61 } 62 // if(now!=1) 63 } 64 65 int main() 66 { 67 int n,m,nl=0; 68 scanf("%d%d",&n,&m); 69 t[1].step=0; 70 memset(t[1].son,0,sizeof(t[1].son)); 71 t[1].pre=0; 72 while(1) 73 { 74 scanf("%s",s); 75 int l=strlen(s); 76 add(l); 77 nl+=l; 78 if(nl>=n) break; 79 } 80 now=1; 81 nl=0; 82 while(1) 83 { 84 scanf("%s",s); 85 int l=strlen(s); 86 ffind(l); 87 nl+=l; 88 if(nl>=m) break; 89 } 90 ans++; 91 printf("%d\n",ans); 92 return 0; 93 }
5、
Description:
写完表白信,外星人晚上做了一个梦,梦见他有了好多好多的妹子(一共
有 n 个呢),虽然这些妹子的手不能旋转,但是他还是很喜欢她们。
每个妹子有个名字 ,住在 n 个房间里,因为妹子之间要聊天,外星
人帮她们之间的房间用外星技术打造了一些双向的传送门,虽然外星人能
力有限,只能建 n-1 个传送门,但是他保证了这些房间之间两两可以互相到
达。外星人现在拿着 m 份妹子的名单,每次他要从第 x 个妹子的房间来到
第 y 个妹子的房间,他想知道他每次经过的妹子里,名字出现在名单中的名
字最长的是哪位(心动女生^w^) ,你不用输出她的名字,因为外星人会因为
你暴露了她的名字而对你旋转他的手臂,你只要输出最长的名字的长度即
可Standard Input:
14a
ab
abc
d1
2
1
3
1 1 abc
1 1 d
1 3 abc
Standard Output:
10
3
不会说我当时想的
后缀数组+线段树+树链剖分+RMQ,我打了200行代码之后终于放弃治疗了。。
好,正解是线段树+AC自动机+树链剖分。。
不要说我为什么不想AC自动姬,因为我爱后缀数组ORZ。。
然后就是先在线段树里存询问(vector),对于有标记的区间,就建AC自动机,然后用名单串在上面跑。。
不想打怎么破ORZ。。
2016-11-07 19:32:13
爆零快乐,祝你快乐。