zoukankan      html  css  js  c++  java
  • 洛谷 P4503 [CTSC2014]企鹅QQ

    暴力枚举不同的一位即可。。

    主要是常数问题

    1.统计答案时用sort速度快于用tr1/unordered_map,后者又快于map

    (tr1/unordered_map完全达不到理论复杂度上的O(1)一次操作)(虽然复杂度一样,sort后统计比map要快得多)

    2.幸好没卡自然溢出...双模hash直接T飞

     1 #pragma GCC optimize(3)
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<vector>
     6 using namespace std;
     7 #define fi first
     8 #define se second
     9 #define mp make_pair
    10 #define pb push_back
    11 typedef long long ll;
    12 typedef unsigned long long ull;
    13 typedef pair<int,int> pii;
    14 namespace Hash
    15 {
    16 typedef ull Hdata;
    17 #define N 1000000
    18 const int X=131;
    19 Hdata pwx[N+100];
    20 void init()
    21 {
    22     pwx[0]=1;
    23     for(int i=1;i<=N;i++)    pwx[i]=pwx[i-1]*X;
    24 }
    25 struct H
    26 {
    27     Hdata h;int sz;
    28     H():h(),sz(0){}
    29     H(const Hdata &a,int b):h(a),sz(b){}
    30 };
    31 H operator+(const H &a,const H &b)
    32 {
    33     H ans;ans.sz=a.sz+b.sz;
    34     ans.h=a.h+b.h*pwx[a.sz];
    35     return ans;
    36 }
    37 bool operator==(const H &a,const H &b)
    38 {
    39     return a.sz==b.sz&&a.h==b.h;
    40 }
    41 }
    42 using Hash::Hdata;
    43 using Hash::H;
    44 using Hash::X;
    45 using Hash::pwx;
    46 
    47 
    48 int n,l,s;ll ans;
    49 struct S
    50 {
    51     Hdata hs[201];
    52     S& operator=(const char *s)
    53     {
    54         for(int i=1;i<=l;i++)
    55         {
    56             hs[i]=hs[i-1]*X+s[i];
    57         }
    58         return *this;
    59     }
    60     H gett(int l,int r)
    61     {
    62         if(l>r)    return H();
    63         return H(hs[r]-hs[l-1]*pwx[r-l+1],r-l+1);
    64     }
    65 }ss[30100];
    66 char tmp[2010];
    67 Hdata tta[30100];
    68 int main()
    69 {
    70     int i,j,ttt,tt2;
    71     Hash::init();
    72     scanf("%d%d%d",&n,&l,&s);
    73     for(i=1;i<=n;i++)
    74     {
    75         scanf("%s",tmp+1);
    76         ss[i]=tmp;
    77     }
    78     for(j=1;j<=l;j++)
    79     {
    80         ttt=0;
    81         for(i=1;i<=n;i++)
    82             tta[++ttt]=(ss[i].gett(1,j-1)+ss[i].gett(j+1,l)).h;
    83         sort(tta+1,tta+ttt+1);tt2=0;
    84         for(i=1;i<=ttt;i++)
    85         {
    86             tt2++;
    87             if(i==ttt||tta[i+1]!=tta[i])
    88             {
    89                 //printf("%d %d
    ",j,tt2);
    90                 ans+=tt2*(tt2-1)/2;
    91                 tt2=0;
    92             }
    93         }
    94     }
    95     printf("%lld",ans);
    96     return 0;
    97 }
  • 相关阅读:
    DLink无线路由器做交换机配置
    解决超过两小时的问题记录
    SIP学习之旅【资料收集篇】

    从google code里面获取代码的方法
    NSString表示的时间转为time_t
    C语言中 时间日期格式化符号 详解
    (转)time_t的定义
    (分享)简单圆角UITextView
    viewDidUnload释疑
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9390549.html
Copyright © 2011-2022 走看看