【两位良心出题人的北赛】 总结

啊啊啊。。。

为什么我还是觉得不良心= =

我垃圾咯。。。。。。。

题目真的!!!!好坑!!!!!!!


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
",ans);
92     return 0;
93 }
View Code

5、

Description:
写完表白信,外星人晚上做了一个梦,梦见他有了好多好多的妹子(一共
有 n 个呢),虽然这些妹子的手不能旋转,但是他还是很喜欢她们。
每个妹子有个名字 ,住在 n 个房间里,因为妹子之间要聊天,外星
人帮她们之间的房间用外星技术打造了一些双向的传送门,虽然外星人能
力有限,只能建 n-1 个传送门,但是他保证了这些房间之间两两可以互相到
达。外星人现在拿着 m 份妹子的名单,每次他要从第 x 个妹子的房间来到
第 y 个妹子的房间,他想知道他每次经过的妹子里,名字出现在名单中的名
字最长的是哪位(心动女生^w^) ,你不用输出她的名字,因为外星人会因为
你暴露了她的名字而对你旋转他的手臂,你只要输出最长的名字的长度即


Standard Input:
14a
ab
abc
d

1

2

1

3
1 1 abc
1 1 d
1 3 abc
Standard Output:
1

0

3

不会说我当时想的

后缀数组+线段树+树链剖分+RMQ,我打了200行代码之后终于放弃治疗了。。

好,正解是线段树+AC自动机+树链剖分。。

不要说我为什么不想AC自动姬,因为我爱后缀数组ORZ。。

然后就是先在线段树里存询问(vector),对于有标记的区间,就建AC自动机,然后用名单串在上面跑。。

不想打怎么破ORZ。。

2016-11-07 19:32:13

爆零快乐,祝你快乐。

原文地址:https://www.cnblogs.com/Konjakmoyu/p/6040305.html