全部代碼
http://codeforces.com/submissions/hanfei19910908
C題:

cf #143 C
1 #include<iostream>
2 #include<cstdio>
3 #include<algorithm>
4 using namespace std;
5 const int N = 100005;
6 int Q[N], num[N];
7 int main(){
8 int n;long long k;
9 cin>>n>>k;
10 for(int i=0;i<n;i++)cin>>num[i];
11 sort(num,num+n);
12 int sum = 1, ans = num[0], head = 0, tail = 1;
13 //for(int i=0;i<n;i++) cout<<num[i]<<" ";cout<<endl;
14 for(int i=1;i<n;i++){
15 k -= 1LL*(num[i]-num[i-1])*(tail - head);
16 while(k < 0) {
17 k +=num[i] - num[Q[head++]];
18 }
19 Q[tail++] = i;
20 if(tail-head>sum) {
21 sum = tail-head;
22 ans = num[i];
23 }
24 }
25 cout<<sum<<" "<<ans<<endl;
26 }
27 A題 略
B題
構造一個長度為n的數列,使每個數在1到l之間,并滿足a0-a1+a2-a3+...+ai * (-1)^(i%2) + ... = d
算法分析:
將所有項設成1,然后再分配。
C題
給一個長度為n(n<100,000)的數列,給一個數k(k<1,000,000,000),你可以讓數列中的一些數加1,最多可以使用k次。
現在給你隨意分配的權力,問相同的數最多的數是多少?
算法分析:
排序之后,枚舉答案。 判定的時候如果暴力往前是n*sqrt(k),可以二分到達n*logn。
D題
給一個與坐標軸平行的立方體。每個面上有標號。問你在k點可以看見的標號和。
算法分析:
因為是立方體,判斷一下坐標范圍就可以了。
E題
給一個“點仙人掌”,即強聯通分量都是簡單環的圖。給k此詢問,問u和v之間存在幾條簡單路。
算法分析:
tarjan強聯通縮點
倍增法求LCA
posted on 2012-10-08 06:41
西月弦 閱讀(225)
評論(0) 編輯 收藏 引用