首页 > 代码库 > 2017计蒜客(四,五,六)

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\n",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\n",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\n",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\n",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\n",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\n",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\n",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\n",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\n",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\n",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\n",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

 

2017计蒜客(四,五,六)