zoukankan      html  css  js  c++  java
  • 2017计蒜客(四,五,六)

    2017 计蒜之道 初赛 第四场 rank 178 题解

     1A

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n,m,k,v[110][110];
     4 void setrow(int c)
     5 {
     6     for(int j=1;j<=m;j++) v[c][j]=1;
     7 }
     8 void setcol(int c)
     9 {
    10     for(int j=1;j<=n;j++) v[j][c]=1;
    11 }
    12 int dfs(int i,int j)
    13 {
    14     if(v[i][j]) return 0;
    15     v[i][j]=1;
    16     return dfs(i+1,j)+dfs(i-1,j)+dfs(i,j+1)+dfs(i,j-1)+1;
    17 }
    18 int main()
    19 {
    20     while(scanf("%d%d%d",&n,&m,&k)==3)
    21     {
    22         memset(v,0,sizeof(v));
    23         for(int i=0,d,c;i<k;i++)
    24         {
    25             scanf("%d%d",&d,&c);
    26             if(d==0) setrow(c);
    27             else setcol(c);
    28         }
    29         setrow(0);
    30         setrow(n+1);
    31         setcol(0);
    32         setcol(m+1);
    33         //puts("ok");
    34         int ans=0;
    35         for(int i=1;i<=n;i++)
    36         {
    37             for(int j=1;j<=m;j++)
    38             {
    39                 ans+=dfs(i,j)/2;
    40             }
    41         }
    42         printf("%d
    ",ans);
    43     }
    44     return 0;
    45 }
    2017 计蒜之道 初赛 第四场 A. 商汤科技的安全令牌

    WA一次,其实这道题是主元素问题,可以通过每次去掉两个不同的元素来达到O(n)的时间复杂度和O(1)的空间复杂度(不包括本数组)

     1 //WA
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 int n;
     5 map<pair<int,int>,int> mp;
     6 int main()
     7 {
     8     while(scanf("%d",&n)==1)
     9     {
    10         while(n--)
    11         {
    12             int a,b,c,d;
    13             scanf("%d%d%d%d",&a,&b,&c,&d);
    14             mp[make_pair(c-a,d-b)]++;
    15         }
    16         pair<int,int> ans=mp.begin()->first;
    17         int maxt=0;
    18         for(auto it=mp.begin();it!=mp.end();it++)
    19         {
    20             if(it->second > maxt) ans=it->first;
    21         }
    22         printf("%d %d
    ",ans.first,ans.second);
    23     }
    24     return 0;
    25 }
    26 //AC
    27 #include<bits/stdc++.h>
    28 using namespace std;
    29 int n;
    30 map<pair<int,int>,int> mp;
    31 int main()
    32 {
    33     while(scanf("%d",&n)==1)
    34     {
    35         mp.clear();
    36         while(n--)
    37         {
    38             int a,b,c,d;
    39             scanf("%d%d%d%d",&a,&b,&c,&d);
    40             mp[make_pair(c-a,d-b)]++;
    41         }
    42         pair<int,int> ans=mp.begin()->first;
    43         int maxt=0;
    44         for(auto it=mp.begin();it!=mp.end();it++)
    45         {
    46             if(it->second > maxt) ans=it->first,maxt=it->second;
    47         }
    48         printf("%d %d
    ",ans.first,ans.second);
    49     }
    50     return 0;
    51 }
    2017 计蒜之道 初赛 第四场 B. 商汤科技的行人检测(简单)

    2017 计蒜之道 初赛 第五场 rank 131 题解

    A题一开始没考虑n=0的情况返回0错了1发,然后没想到n=1时要输出0错了一发,第三发WA手误

      1 //WA1
      2 #include<bits/stdc++.h>
      3 using namespace std;
      4 int n,m;
      5 int a[110];
      6 int solve()
      7 {
      8     for(int i=m-1;i>=0;i--)
      9     {
     10         if(a[i]>=n) return m-i;
     11         if(a[i]==0) break;
     12         n-=a[i]-1;
     13     }
     14     return -1;
     15 }
     16 int main() 
     17 {
     18     while(cin>>n>>m)
     19     {
     20         for(int i=0;i<m;i++) cin>> a[i];
     21         sort(a,a+m);
     22         int ans=solve();
     23         if(ans==-1) cout<<"Impossible"<<endl;
     24         else cout<<ans<<endl;
     25     }
     26     return 0;
     27 }
     28 //WA2
     29 #include<bits/stdc++.h>
     30 using namespace std;
     31 int n,m;
     32 int a[110];
     33 int solve()
     34 {
     35     if(n==0) return 0;
     36     for(int i=m-1;i>=0;i--)
     37     {
     38         if(a[i]>=n) return m-i;
     39         if(a[i]==0) break;
     40         n-=a[i]-1;
     41     }
     42     return -1;
     43 }
     44 int main() 
     45 {
     46     while(cin>>n>>m)
     47     {
     48         for(int i=0;i<m;i++) cin>> a[i];
     49         sort(a,a+m);
     50         int ans=solve();
     51         if(ans==-1) cout<<"Impossible"<<endl;
     52         else cout<<ans<<endl;
     53     }
     54     return 0;
     55 }
     56 //WA3
     57 #include<bits/stdc++.h>
     58 using namespace std;
     59 int n,m;
     60 int a[110];
     61 int solve()
     62 {
     63     if(n==0) return 0;
     64     if(n==1) return 1;
     65     for(int i=m-1;i>=0;i--)
     66     {
     67         if(a[i]>=n) return m-i;
     68         if(a[i]==0) break;
     69         n-=a[i]-1;
     70     }
     71     return -1;
     72 }
     73 int main() 
     74 {
     75     while(cin>>n>>m)
     76     {
     77         for(int i=0;i<m;i++) cin>> a[i];
     78         sort(a,a+m);
     79         int ans=solve();
     80         if(ans==-1) cout<<"Impossible"<<endl;
     81         else cout<<ans<<endl;
     82     }
     83     return 0;
     84 }
     85 //AC
     86 #include<bits/stdc++.h>
     87 using namespace std;
     88 int n,m;
     89 int a[110];
     90 int solve()
     91 {
     92     if(n==0) return 0;
     93     if(n==1) return 0;
     94     for(int i=m-1;i>=0;i--)
     95     {
     96         if(a[i]>=n) return m-i;
     97         if(a[i]==0) break;
     98         n-=a[i]-1;
     99     }
    100     return -1;
    101 }
    102 int main() 
    103 {
    104     while(cin>>n>>m)
    105     {
    106         for(int i=0;i<m;i++) cin>> a[i];
    107         sort(a,a+m);
    108         int ans=solve();
    109         if(ans==-1) cout<<"Impossible"<<endl;
    110         else cout<<ans<<endl;
    111     }
    112     return 0;
    113 }
    2017 计蒜之道 初赛 第五场A. UCloud 机房的网络搭建

     1A 数组标记,cnt记录不满足标记的不同数的个数,cnt为0时ans++

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n,m;
     4 int s[50010],t[50010];
     5 int mp[50010],v[50010];
     6 int main() 
     7 {
     8     while(scanf("%d",&n)==1)
     9     {
    10         for(int i=0;i<n;i++) scanf("%d",s+i);
    11         scanf("%d",&m);
    12         while(m--)
    13         {
    14             memset(mp,0,sizeof(mp));
    15             memset(v,0,sizeof(v));
    16             int k,cnt=0,ans=0;
    17             scanf("%d",&k);
    18             for(int i=0;i<k;i++)
    19             {
    20                 scanf("%d",t+k);
    21                 mp[t[k]]--;
    22                 if(!v[t[k]]) cnt++;
    23                 v[t[k]]=1;
    24             }
    25             for(int i=0;i<k;i++)
    26             {
    27                 if(!v[s[i]]) continue;
    28                 mp[s[i]]++;
    29                 if(mp[s[i]]==0) cnt--;
    30                 if(mp[s[i]]==1) cnt++;
    31             }
    32             for(int i=k;i<=n;i++)
    33             {
    34                 if(cnt==0) ans++;
    35                 if(v[s[i-k]])
    36                 {
    37                     mp[s[i-k]]--;
    38                     if(mp[s[i-k]]==-1) cnt++;//0->-1
    39                     if(mp[s[i-k]]==0) cnt--;//1->0
    40                 }
    41                 if(!v[s[i]] || i==n) continue;
    42                 mp[s[i]]++;
    43                 if(mp[s[i]]==0) cnt--;//1->0
    44                 if(mp[s[i]]==1) cnt++;//0->1
    45             }
    46             printf("%d
    ",ans);
    47         }
    48     }
    49     return 0;
    50 }
    2017 计蒜之道 初赛 第五场 B. UCloud 的安全秘钥(简单)C. UCloud 的安全秘钥(中等)

    赛后:前面可能是因为hash写挫了WA了好多发,后面就开始T了,map会被卡常,改用数组sort后upper_bound()-lower_bound()可过,或者用手写的hash map

    这里还见识到了没用过的hash,能比较两个数组排序后是否相等,方法是将原来的数组元素散列,然后每次增减一个元素用加减法

      1 //WA1
      2 #include <bits/stdc++.h>
      3 using namespace std;
      4 int n,m;
      5 int s[50010];
      6 int mp[50010],v[50010];
      7 vector<vector<int> >t;
      8 bool cmp(const vector<int>&a,const vector<int>&b)
      9 {
     10     return a.size()<b.size();
     11 }
     12 map<unsigned long long ,int>table;
     13 const unsigned long long HASHNUM=1000000007,p=1000009;
     14 template <class T>
     15 unsigned long long HASH(T&t)
     16 {
     17     unsigned long long ans=0;
     18     for(auto it=t.begin();it!=t.end();it++) ans=(ans+(*it)*p)%HASHNUM;
     19     return ans;
     20 }
     21 void cal(int l)
     22 {
     23     multiset<int>st;
     24     for(int i=0;i<l;i++) st.insert(s[i]);
     25     table.clear();
     26     for(int i=l;i<=n;i++)
     27     {
     28         table[HASH(st)]++;
     29         st.erase(st.find(s[i-l]));
     30         st.insert(s[i]);
     31     }
     32 }
     33 map<unsigned long long,int>id;
     34 int ans[50010];
     35 int main() 
     36 {
     37     while(scanf("%d",&n)==1)
     38     {
     39         for(int i=0;i<n;i++) scanf("%d",s+i);
     40         scanf("%d",&m);
     41         for(int i=0;i<m;i++)
     42         {
     43             int k,x;
     44             scanf("%d",&k);
     45             vector<int>tmp;
     46             while(k--) scanf("%d",&x),tmp.push_back(x);
     47             sort(tmp.begin(),tmp.end());
     48             id[HASH(tmp)]=i;
     49             t.push_back(tmp);
     50         }
     51         sort(t.begin(),t.end(),cmp);
     52         for(int i=0;i<m;)
     53         {
     54             int j=i;
     55             while(j<m && t[j].size()==t[i].size()) j++;        
     56             cal(t[i].size());
     57             for(int k=i;k<j;k++) ans[id[HASH(t[k])]]=table[HASH(t[k])];
     58             i=j;
     59         }
     60         for(int i=0;i<m;i++) printf("%d
    ",ans[i]);
     61     }
     62     return 0;
     63 }
     64 //WA2
     65 #include <bits/stdc++.h>
     66 using namespace std;
     67 int n,m;
     68 int s[50010];
     69 int mp[50010],v[50010];
     70 vector<vector<int> >t;
     71 bool cmp(const vector<int>&a,const vector<int>&b)
     72 {
     73     return a.size()<b.size();
     74 }
     75 map<unsigned long long ,int>table;
     76 const unsigned long long HASHNUM=1000007,p=10009;
     77 template <class T>
     78 unsigned long long HASH(T&t)
     79 {
     80     unsigned long long ans=0;
     81     for(auto it=t.begin();it!=t.end();it++) ans=(ans+(*it)*p)%HASHNUM;
     82     return ans;
     83 }
     84 void cal(int l)
     85 {
     86     multiset<int>st;
     87     for(int i=0;i<l;i++) st.insert(s[i]);
     88     table.clear();
     89     for(int i=l;i<=n;i++)
     90     {
     91         table[HASH(st)]++;
     92         st.erase(st.find(s[i-l]));
     93         st.insert(s[i]);
     94     }
     95 }
     96 map<unsigned long long,int>id;
     97 int ans[50010];
     98 int main() 
     99 {
    100     while(scanf("%d",&n)==1)
    101     {
    102         for(int i=0;i<n;i++) scanf("%d",s+i);
    103         scanf("%d",&m);
    104         for(int i=0;i<m;i++)
    105         {
    106             int k,x;
    107             scanf("%d",&k);
    108             vector<int>tmp;
    109             while(k--) scanf("%d",&x),tmp.push_back(x);
    110             sort(tmp.begin(),tmp.end());
    111             id[HASH(tmp)]=i;
    112             t.push_back(tmp);
    113         }
    114         sort(t.begin(),t.end(),cmp);
    115         for(int i=0;i<m;)
    116         {
    117             int j=i;
    118             while(j<m && t[j].size()==t[i].size()) j++;        
    119             cal(t[i].size());
    120             for(int k=i;k<j;k++) ans[id[HASH(t[k])]]=table[HASH(t[k])];
    121             i=j;
    122         }
    123         for(int i=0;i<m;i++) printf("%d
    ",ans[i]);
    124     }
    125     return 0;
    126 }
    127 //WA3
    128 #include <bits/stdc++.h>
    129 using namespace std;
    130 int n,m;
    131 int s[50010];
    132 int mp[50010],v[50010];
    133 map<unsigned long long ,int>table;
    134 unsigned long long randnum[50010];
    135 const unsigned long long HASHNUM=1000000007,p=1000009;
    136 template <class T>
    137 unsigned long long HASH(T&t)
    138 {
    139     unsigned long long ans=0;
    140     for(auto it=t.begin();it!=t.end();it++) ans=(ans+randnum[*it])%HASHNUM;
    141     return ans;
    142 }
    143 void cal(int l)
    144 {
    145     multiset<int>st;
    146     for(int i=0;i<l;i++) st.insert(s[i]);
    147     table.clear();
    148     for(int i=l;i<=n;i++)
    149     {
    150         table[HASH(st)]++;
    151         st.erase(st.find(s[i-l]));
    152         st.insert(s[i]);
    153     }
    154 }
    155 struct node 
    156 {
    157     unsigned long long hash;
    158     int len,i;
    159     bool operator < (const node&a)
    160     {
    161         return len<a.len;
    162     }
    163 };
    164 int ans[50010];
    165 vector<node>t;
    166 int main() 
    167 {
    168     for(int i=0;i<50010;i++) randnum[i]=1ULL * (rand()*p)+rand();
    169     while(scanf("%d",&n)==1)
    170     {
    171         for(int i=0;i<n;i++) scanf("%d",s+i);
    172         scanf("%d",&m);
    173         for(int i=0;i<m;i++)
    174         {
    175             int k,x;
    176             scanf("%d",&k);
    177             vector<int>tmp;
    178             while(k--) scanf("%d",&x),tmp.push_back(x);
    179             node tmpn;
    180             tmpn.hash=HASH(tmp);
    181             tmpn.i=i;
    182             tmpn.len=tmp.size();
    183             t.push_back(tmpn);
    184         }
    185         sort(t.begin(),t.end());
    186         for(int i=0;i<m;)
    187         {
    188             int j=i;
    189             while(j<m && t[j].len==t[i].len) j++;        
    190             cal(t[i].len);
    191             for(int k=i;k<j;k++) ans[t[k].i]=table[t[k].hash];
    192             i=j;
    193         }
    194         for(int i=0;i<m;i++) printf("%d
    ",ans[i]);
    195     }
    196     return 0;
    197 }
    198 //WA4
    199 #include <bits/stdc++.h>
    200 using namespace std;
    201 int n,m;
    202 int s[50010];
    203 int mp[50010],v[50010];
    204 map<unsigned long long ,int>table;
    205 unsigned long long randnum[50010];
    206 const unsigned long long HASHNUM=1000000007,p=1000009;
    207 template <class T>
    208 unsigned long long HASH(T&t)
    209 {
    210     unsigned long long ans=0;
    211     for(auto it=t.begin();it!=t.end();it++) ans=(ans+randnum[*it])%HASHNUM;
    212     return ans;
    213 }
    214 void cal(int l)
    215 {
    216     multiset<int>st;
    217     for(int i=0;i<l;i++) st.insert(s[i]);
    218     table.clear();
    219     for(int i=l;i<=n;i++)
    220     {
    221         table[HASH(st)]++;
    222         st.erase(st.find(s[i-l]));
    223         st.insert(s[i]);
    224     }
    225 }
    226 struct node 
    227 {
    228     unsigned long long hash;
    229     int len,i;
    230     bool operator < (const node&a)
    231     {
    232         return len<a.len;
    233     }
    234 };
    235 int ans[50010];
    236 vector<node>t;
    237 int main() 
    238 {
    239     for(int i=0;i<50010;i++) randnum[i]=1ULL * ((rand()*p)+rand()*p)+rand();
    240     while(scanf("%d",&n)==1)
    241     {
    242         for(int i=0;i<n;i++) scanf("%d",s+i);
    243         scanf("%d",&m);
    244         for(int i=0;i<m;i++)
    245         {
    246             int k,x;
    247             scanf("%d",&k);
    248             vector<int>tmp;
    249             while(k--) scanf("%d",&x),tmp.push_back(x);
    250             node tmpn;
    251             tmpn.hash=HASH(tmp);
    252             tmpn.i=i;
    253             tmpn.len=tmp.size();
    254             t.push_back(tmpn);
    255         }
    256         sort(t.begin(),t.end());
    257         for(int i=0;i<m;)
    258         {
    259             int j=i;
    260             while(j<m && t[j].len==t[i].len) j++;        
    261             cal(t[i].len);
    262             for(int k=i;k<j;k++) ans[t[k].i]=table[t[k].hash];
    263             i=j;
    264         }
    265         for(int i=0;i<m;i++) printf("%d
    ",ans[i]);
    266     }
    267     return 0;
    268 }
    UCloud 的安全秘钥(困难)WA
      1 //TLE5
      2 #include <bits/stdc++.h>
      3 using namespace std;
      4 int n,m;
      5 int s[50010];
      6 int mp[50010],v[50010];
      7 map<unsigned long long ,int>table;
      8 unsigned long long randnum[50010];
      9 const unsigned long long HASHNUM=1000000007,p=1000009;
     10 template <class T>
     11 unsigned long long HASH(T&t)
     12 {
     13     unsigned long long ans=0;
     14     for(auto it=t.begin();it!=t.end();it++) ans=ans+randnum[*it];
     15     return ans;
     16 }
     17 void cal(int l)
     18 {
     19     multiset<int>st;
     20     for(int i=0;i<l;i++) st.insert(s[i]);
     21     table.clear();
     22     for(int i=l;i<=n;i++)
     23     {
     24         table[HASH(st)]++;
     25         st.erase(st.find(s[i-l]));
     26         st.insert(s[i]);
     27     }
     28 }
     29 struct node 
     30 {
     31     unsigned long long hash;
     32     int len,i;
     33     bool operator < (const node&a)
     34     {
     35         return len<a.len;
     36     }
     37 };
     38 int ans[50010];
     39 vector<node>t;
     40 int main() 
     41 {
     42     for(int i=0;i<50010;i++) randnum[i]=1ULL * ((rand()*p)+rand()*p)+rand();
     43     while(scanf("%d",&n)==1)
     44     {
     45         for(int i=0;i<n;i++) scanf("%d",s+i);
     46         scanf("%d",&m);
     47         for(int i=0;i<m;i++)
     48         {
     49             int k,x;
     50             scanf("%d",&k);
     51             vector<int>tmp;
     52             while(k--) scanf("%d",&x),tmp.push_back(x);
     53             node tmpn;
     54             tmpn.hash=HASH(tmp);
     55             tmpn.i=i;
     56             tmpn.len=tmp.size();
     57             t.push_back(tmpn);
     58         }
     59         sort(t.begin(),t.end());
     60         for(int i=0;i<m;)
     61         {
     62             int j=i;
     63             while(j<m && t[j].len==t[i].len) j++;        
     64             cal(t[i].len);
     65             for(int k=i;k<j;k++) ans[t[k].i]=table[t[k].hash];
     66             i=j;
     67         }
     68         for(int i=0;i<m;i++) printf("%d
    ",ans[i]);
     69     }
     70     return 0;
     71 }
     72 //TLE6
     73 #include <bits/stdc++.h>
     74 using namespace std;
     75 int n,m;
     76 int s[50010];
     77 int mp[50010],v[50010];
     78 map<unsigned long long ,int>table;
     79 unsigned long long randnum[50010];
     80 const unsigned long long HASHNUM=1000000007,p=1000009;
     81 template <class T>
     82 unsigned long long HASH(T&t)
     83 {
     84     unsigned long long ans=0;
     85     for(auto it=t.begin();it!=t.end();it++) ans+=randnum[*it];
     86     return ans;
     87 }
     88 void cal(int l)
     89 {
     90     unsigned long long ans=0;
     91     for(int i=0;i<l;i++) ans+=randnum[s[i]];
     92     table.clear();
     93     for(int i=l;i<=n;i++)
     94     {
     95         table[ans]++;
     96         ans-=randnum[s[i-l]];
     97         ans+=randnum[s[i]];
     98     }
     99 }
    100 struct node 
    101 {
    102     unsigned long long hash;
    103     int len,i;
    104     bool operator < (const node&a)
    105     {
    106         return len<a.len;
    107     }
    108 };
    109 int ans[50010];
    110 vector<node>t;
    111 int main() 
    112 {
    113     for(int i=0;i<50010;i++) randnum[i]=1ULL * ((rand()*p)+rand()*p)+rand();
    114     while(scanf("%d",&n)==1)
    115     {
    116         for(int i=0;i<n;i++) scanf("%d",s+i);
    117         scanf("%d",&m);
    118         for(int i=0;i<m;i++)
    119         {
    120             int k,x;
    121             scanf("%d",&k);
    122             vector<int>tmp;
    123             while(k--) scanf("%d",&x),tmp.push_back(x);
    124             node tmpn;
    125             tmpn.hash=HASH(tmp);
    126             tmpn.i=i;
    127             tmpn.len=tmp.size();
    128             t.push_back(tmpn);
    129         }
    130         sort(t.begin(),t.end());
    131         for(int i=0;i<m;)
    132         {
    133             int j=i;
    134             while(j<m && t[j].len==t[i].len) j++;        
    135             cal(t[i].len);
    136             for(int k=i;k<j;k++) ans[t[k].i]=table[t[k].hash];
    137             i=j;
    138         }
    139         for(int i=0;i<m;i++) printf("%d
    ",ans[i]);
    140     }
    141     return 0;
    142 }
    UCloud 的安全秘钥(困难)TLE
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef unsigned long long ULL;
     4 const int N=50010;
     5 int n,m;
     6 int s[N];
     7 int mp[N],v[N];
     8 vector<ULL>table;
     9 ULL randnum[N];
    10 const ULL HASHNUM=1000000007,p=1000009;
    11 template <class T>
    12 ULL HASH(T&t)
    13 {
    14     ULL ans=0;
    15     for(auto it=t.begin();it!=t.end();it++) ans+=randnum[*it];
    16     return ans;
    17 }
    18 void cal(int l)
    19 {
    20     ULL ans=0;
    21     for(int i=0;i<l;i++) ans+=randnum[s[i]];
    22     table.clear();
    23     for(int i=l;i<=n;i++)
    24     {
    25         table.push_back(ans);
    26         ans-=randnum[s[i-l]];
    27         ans+=randnum[s[i]];
    28     }
    29     sort(table.begin(),table.end());
    30 }
    31 struct node 
    32 {
    33     ULL hash;
    34     int len,i;
    35     bool operator < (const node&a)
    36     {
    37         return len<a.len;
    38     }
    39 };
    40 int ans[N];
    41 vector<node>t;
    42 int main() 
    43 {
    44     for(int i=0;i<N;i++) randnum[i]=1ULL * ((rand()*p)+rand()*p)+rand();
    45     while(scanf("%d",&n)==1)
    46     {
    47         for(int i=0;i<n;i++) scanf("%d",s+i);
    48         scanf("%d",&m);
    49         for(int i=0;i<m;i++)
    50         {
    51             int k,x;
    52             scanf("%d",&k);
    53             vector<int>tmp;
    54             while(k--) scanf("%d",&x),tmp.push_back(x);
    55             node tmpn;
    56             tmpn.hash=HASH(tmp);
    57             tmpn.i=i;
    58             tmpn.len=tmp.size();
    59             t.push_back(tmpn);
    60         }
    61         sort(t.begin(),t.end());
    62         for(int i=0;i<m;)
    63         {
    64             int j=i;
    65             while(j<m && t[j].len==t[i].len) j++;        
    66             cal(t[i].len);
    67             for(int k=i;k<j;k++) ans[t[k].i]=upper_bound(table.begin(),table.end(),t[k].hash)-lower_bound(table.begin(),table.end(),t[k].hash);
    68             i=j;
    69         }
    70         for(int i=0;i<m;i++) printf("%d
    ",ans[i]);
    71     }
    72     return 0;
    73 }
    74 /*
    75 统计数组a中每个数出现的次数:
    76 最简单的是直接用map<T,int>mp
    77 for(int i=0;i<a.size();i++) mp[a[i]]++;
    78 但map log常数较大,容易被卡常
    79 不用map:
    80 sort(a.begin(),a.end());
    81 则x出现的次数为
    82 upper_bound(a.begin(),a.end(),x)-lower_bound(a.begin(),a.end(),x);
    83 */
    84 /*
    85 与顺序无关的数组hash值(只考虑排序后是否相等)
    86 const int p=100009;
    87 ULL randnum[N];
    88 for(int i=0;i<N;i++) randnum[i]=1ULL * ((rand()*p)+rand()*p)+rand();
    89 ULL hash=0;
    90 for(int i=0;i<a.size();i++) hash+=randnum[a[i]];//增加或减少一个数a[i]则+ - randnum[a[i]];
    91 */
    UCloud 的安全秘钥(困难)AC
  • 相关阅读:
    (4.25)Sqlserver中 登录用户只能看到自己拥有权限的库
    【查阅】mysql配置文件/参数文件重要参数笔录(my.cnf)
    【监控笔记】【2.5】DML(CDC)、DDL(DDL触发器)跟踪数据更改,数据库审计
    SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑
    【监控笔记】【2.4】SQL Server中的 Ring Buffer 诊断各种系统资源压力情况
    【监控笔记】【2.3】扩展事件——慢查询SQL(执行超过3S的SQL)
    【监控笔记】【2.2】扩展事件——死锁监控
    最小配置启动SQL SERVER,更改SQL Server最大内存大小导致不能启动的解决方法
    【监控笔记】【2.1】扩展事件
    【扩展事件】跟踪超过3秒的SQL
  • 原文地址:https://www.cnblogs.com/cdyboke/p/6939045.html
Copyright © 2011-2022 走看看