Codeforces Round #577 (Div. 2) (A、B、C)

A、Important Exam

简单贪心即可

 1 #include<iostream>
 2 #include<sstream>
 3 #include<fstream>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<iomanip>
 7 #include<cstdlib>
 8 #include<cctype>
 9 #include<vector>
10 #include<string>
11 #include<cmath>
12 #include<ctime>
13 #include<stack>
14 #include<queue>
15 #include<map>
16 #include<set>
17 #define mem(a,b) memset(a,b,sizeof(a))
18 #define random(a,b) (rand()%(b-a+1)+a)
19 #define ll long long
20 #define ull unsigned long long
21 #define e 2.71828182
22 #define Pi acos(-1.0)
23 #define ls(rt) (rt<<1)
24 #define rs(rt) (rt<<1|1)
25 #define lowbit(x) (x&(-x))
26 using namespace std;
27 const int MAXM=1e3+5;
28 int read()
29 {
30     int s=1,x=0;
31     char ch=getchar();
32     while(!isdigit(ch)) {if(ch=='-') s=-1;ch=getchar();}
33     while(isdigit(ch)) {x=10*x+ch-'0';ch=getchar();}
34     return x*s;
35 }
36 int num[MAXM][6];
37 int maxmum[MAXM];
38 int main()
39 {
40     int n=read(),m=read();
41     int t;
42     string answer;
43     for(int i=1;i<=n;++i)
44     {
45         cin>>answer;
46         for(int j=0;j<m;++j)
47         {
48             t=answer[j]-'A'+1;
49             num[j][t]++;
50             if(num[j][t]>maxmum[j]) maxmum[j]=num[j][t];
51         }
52     }
53     int ans=0;
54     for(int i=0;i<m;++i)
55     {
56         t=read();
57         ans+=t*maxmum[i];
58     }
59     cout<<ans<<endl;
60 }
View Code

B、 Zero Array

思维

1、总和需为偶数

2、最大值不大于其余n-1个数的和

 1 #include<iostream>
 2 #include<sstream>
 3 #include<fstream>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<iomanip>
 7 #include<cstdlib>
 8 #include<cctype>
 9 #include<vector>
10 #include<string>
11 #include<cmath>
12 #include<ctime>
13 #include<stack>
14 #include<queue>
15 #include<map>
16 #include<set>
17 #define mem(a,b) memset(a,b,sizeof(a))
18 #define random(a,b) (rand()%(b-a+1)+a)
19 #define ll long long
20 #define ull unsigned long long
21 #define e 2.71828182
22 #define Pi acos(-1.0)
23 #define ls(rt) (rt<<1)
24 #define rs(rt) (rt<<1|1)
25 #define lowbit(x) (x&(-x))
26 using namespace std;
27 const int MAXN=1e5+5;
28 ll a[MAXN],sum[MAXN],n;
29 ll read()
30 {
31     ll s=1,x=0;
32     char ch=getchar();
33     while(!isdigit(ch)) {if(ch=='-') s=-1;ch=getchar();}
34     while(isdigit(ch)) {x=10*x+ch-'0';ch=getchar();}
35     return x*s;
36 }
37 int main()
38 {
39     n=read();
40     for(int i=1;i<=n;++i) 
41     a[i]=read();
42     sort(a+1,a+n+1);
43     ll sum=0;
44     for(int i=1;i<n;++i)
45     sum+=a[i];
46     if(sum>=a[n]&&(sum+a[n])%2==0)
47     cout<<"YES\n";
48     else cout<<"NO\n";
49     return 0;
50 }
View Code

C、 Maximum Median

也有点贪心的味道

 1 #include<iostream>
 2 #include<sstream>
 3 #include<fstream>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<iomanip>
 7 #include<cstdlib>
 8 #include<cctype>
 9 #include<vector>
10 #include<string>
11 #include<cmath>
12 #include<ctime>
13 #include<stack>
14 #include<queue>
15 #include<map>
16 #include<set>
17 #define mem(a,b) memset(a,b,sizeof(a))
18 #define random(a,b) (rand()%(b-a+1)+a)
19 #define ll long long
20 #define ull unsigned long long
21 #define e 2.71828182
22 #define Pi acos(-1.0)
23 #define ls(rt) (rt<<1)
24 #define rs(rt) (rt<<1|1)
25 #define lowbit(x) (x&(-x))
26 using namespace std;
27 const int MAXN=2e5+5;
28 ll a[MAXN];
29 ll read()
30 {
31     int s=1,x=0;
32     char ch=getchar();
33     while(!isdigit(ch)) {if(ch=='-') s=-1;ch=getchar();}
34     while(isdigit(ch)) {x=10*x+ch-'0';ch=getchar();}
35     return x*s;
36 }
37 int main()
38 {
39     int n=read(),k=read();
40     for(int i=1;i<=n;++i) a[i]=read();
41     sort(a+1,a+n+1);
42     int mid=n/2+1;
43     
44     int ans=a[mid];
45     
46     for(int i=mid+1;i<=n;++i)//将a[mid]到a[i-1]补刀a[i] 
47     {
48         ll need=(a[i]-a[i-1])*(i-mid);
49         //cout<<need<<endl;
50         if(k>=need)
51         {
52             k-=need;
53             ans=a[i];
54         }
55         else 
56         {
57             ans+=k/(i-mid);
58             k=0;
59             break;
60         }     
61     }
62     ans+=k/mid;
63     cout<<ans<<endl;
64 }
View Code

有看到别人用二分写。如果最优值类问题实在想不出可以试试二分,主要是写出判断函数。

猜你喜欢

转载自www.cnblogs.com/wangzhebufangqi/p/11333408.html