zoukankan      html  css  js  c++  java
  • 【两位良心出题人的北赛】 总结

    啊啊啊。。。

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

    我垃圾咯。。。。。。。

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


    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

    爆零快乐,祝你快乐。

  • 相关阅读:
    WPF 基础
    设计模式
    设计模式
    设计模式
    设计模式
    设计模式
    设计模式
    【DFS】hdu 1584 蜘蛛牌
    【优先队列】hdu 1434 幸福列车
    【最长公共子序列】hdu 1243 反恐训练营
  • 原文地址:https://www.cnblogs.com/Konjakmoyu/p/6040305.html
Copyright © 2011-2022 走看看