zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 93 (Rated for Div. 2)(A B C D)

    Practice link: https://codeforces.ml/contest/1398

    A. Bad Triangle

    代码:

     1 //#include<bits/stdc++.h>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<iostream>
     6 #include<string>
     7 #include<vector>
     8 #include<stack>
     9 #include<bitset>
    10 #include<cstdlib>
    11 #include<cmath>
    12 #include<set>
    13 #include<list>
    14 #include<deque>
    15 #include<map>
    16 #include<queue>
    17 #define ll long long
    18 #define MOD 1000000007
    19 #define INF 0x3f3f3f3f
    20 #define mem(a,x) memset(a,x,sizeof(a))
    21 #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    22 using namespace std;
    23 const int maxn=1000005;
    24 inline int rd() {
    25     int res = 0,flag = 0;
    26     char ch;
    27     if ((ch = getchar()) == '-')flag = 1;
    28     else if(ch >= '0' && ch <= '9')res = ch - '0';
    29     while ((ch = getchar()) >= '0' && ch <= '9')res = (res<<1) + (res<<3) + (ch - '0');
    30     return flag ? -res : res;
    31 }
    32 int a[50005];
    33 int main()
    34 {
    35     int T;
    36     int n;
    37     cin>>T;
    38     while(T--){
    39         n=rd();
    40         int x=0;
    41         for(int i=1;i<=n;i++){
    42             a[i]=rd();
    43             if(i>2&&a[i]>=a[1]+a[2]&&x==0){
    44                 x=i;
    45             }
    46         }
    47         if(x){
    48             printf("1 2 %d
    ",x);
    49         }else{
    50             printf("-1
    ");
    51         }
    52     }
    53     return 0;
    54 }
    View Code

    B. Substring Removal Game

    代码:

     1 //#include<bits/stdc++.h>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<iostream>
     6 #include<string>
     7 #include<vector>
     8 #include<stack>
     9 #include<bitset>
    10 #include<cstdlib>
    11 #include<cmath>
    12 #include<set>
    13 #include<list>
    14 #include<deque>
    15 #include<map>
    16 #include<queue>
    17 #define ll long long
    18 #define MOD 1000000007
    19 #define INF 0x3f3f3f3f
    20 #define mem(a,x) memset(a,x,sizeof(a))
    21 #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    22 using namespace std;
    23 const int maxn=1000005;
    24 inline int rd() {
    25     int res = 0,flag = 0;
    26     char ch;
    27     if ((ch = getchar()) == '-')flag = 1;
    28     else if(ch >= '0' && ch <= '9')res = ch - '0';
    29     while ((ch = getchar()) >= '0' && ch <= '9')res = (res<<1) + (res<<3) + (ch - '0');
    30     return flag ? -res : res;
    31 }
    32 vector<int>v;
    33 bool cmp(int x,int y){
    34     return x>y;
    35 }
    36 int main()
    37 {
    38     int T;
    39     string s;
    40     cin>>T;
    41     while(T--){
    42         v.clear();
    43         cin>>s;
    44         int k=0;
    45         for(int i=0;i<s.size();i++){
    46             if(s[i]=='1'){
    47                 k++;
    48             }else{
    49                 v.push_back(k);
    50                 k=0;
    51             }
    52         }
    53         if(k!=0)v.push_back(k);
    54         sort(v.begin(),v.end(),cmp);
    55         ll sum=0;
    56         for(int i=0;i<v.size();i+=2){
    57             sum+=v[i];
    58         }
    59         cout<<sum<<endl;
    60     }
    61     return 0;
    62 }
    View Code

    C. Good Subarrays

    题意:求一个字符串中符合 这个条件的子串的数量。

    思路:我们可以把每个元素都减一,那么问题就转化成了一个字符串中有多少个和为 0 的子串,对于这个问题自然而然想到前缀和,就是如果两个前缀和相等,就说明这个子串的和为 0,所以我们可以记录从 1~n 的所有前缀和的数量,然后每次碰到相同的前缀和,就加上前面部分字符串中拥有这个前缀和的数量。

    代码:

     1 //#include<bits/stdc++.h>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<iostream>
     6 #include<string>
     7 #include<vector>
     8 #include<stack>
     9 #include<bitset>
    10 #include<cstdlib>
    11 #include<cmath>
    12 #include<set>
    13 #include<list>
    14 #include<deque>
    15 #include<map>
    16 #include<queue>
    17 #define ll long long
    18 #define MOD 1000000007
    19 #define INF 0x3f3f3f3f
    20 #define mem(a,x) memset(a,x,sizeof(a))
    21 #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    22 using namespace std;
    23 const int maxn=1000005;
    24 inline int rd() {
    25     int res = 0,flag = 0;
    26     char ch;
    27     if ((ch = getchar()) == '-')flag = 1;
    28     else if(ch >= '0' && ch <= '9')res = ch - '0';
    29     while ((ch = getchar()) >= '0' && ch <= '9')res = (res<<1) + (res<<3) + (ch - '0');
    30     return flag ? -res : res;
    31 }
    32 /*
    33 int head[maxn];
    34 int num=0;
    35 struct edg{
    36     int next,to,w;
    37 }edge[maxn];
    38 void add_edge(int u,int v,int w)
    39 {
    40     num++;
    41     edge[num].next=head[u];edge[num].to=v;edge[num].w=w;head[u]=num;
    42     edge[++num].next=head[v];edge[num].to=u;edge[num].w=w;head[v]=num;
    43 } */
    44 //-----------
    45 map<int,int>mp;
    46 int num[maxn];
    47 int main()
    48 {
    49     int T,n;
    50     string s;
    51     cin>>T;
    52     while(T--){
    53         cin>>n;
    54         cin>>s;
    55         int sum=0;
    56         ll ans=0;
    57         for(int i=1;i<=n;i++){
    58             num[i]=s[i-1]-'0'-1;
    59         }
    60         mp.clear();
    61         mp[0]=1;
    62         for(int i=1;i<=n;i++){
    63             sum+=num[i];
    64             if(mp[sum])ans+=mp[sum],mp[sum]++;
    65             else mp[sum]++;
    66         }
    67         printf("%lld
    ",ans);
    68     }
    69     return 0;
    70 }
    71  
    View Code

    D. Colored Rectangles

    题意:给你R对红色的木棒,G对绿色的木棒,B对蓝色的木棒,你每次可以选择两对颜色不同的木棒组成一个矩形,问你这些木棒最大可以组成矩形的总面积。

    思路:dp题,dp[ r ][ g ][ b ]表示对这三种不同颜色的木棒的选择方式,前面是选择好的dp[ r ][ b ][ g ],比如dp[ r ][ g+1 ][ b+1 ]表示选择了绿色和蓝色的两对木棒,要让面积最大肯定是要选择最大的相乘,所以要对三组木棒从大到小的排序。

            转移方程:dp[ x+1 ][ y+1 ][ z ] = max( dp[ x+1 ][ y+1 ][ z ] , dp[ x ][ y ][ z ] + r[ x+1 ] * g[ y+1 ] ) 

                           dp[ x ][ y+1 ][ z+1 ] = max( dp[ x ][ y+1 ][ z+1 ] , dp[ x ][ y ][ z ] + g[ y+1 ] * b[ z+1 ] )

                           dp[ x+1 ][ y ][ z+1 ] = max( dp[ x+1 ][ y ][ z+1 ] , dp[ x ][ y ][ z ] + r[ x+1 ] * b[ z+1 ] )

                          最后用 ans 和这三个值进行比较即可。

    代码:

     1 //#include<bits/stdc++.h>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<iostream>
     6 #include<string>
     7 #include<vector>
     8 #include<stack>
     9 #include<bitset>
    10 #include<cstdlib>
    11 #include<cmath>
    12 #include<set>
    13 #include<list>
    14 #include<deque>
    15 #include<map>
    16 #include<queue>
    17 #define ll long long
    18 #define MOD 1000000007
    19 #define INF 0x3f3f3f3f
    20 #define mem(a,x) memset(a,x,sizeof(a))
    21 #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    22 using namespace std;
    23 const int maxn=1000005;
    24 inline int rd() {
    25     int res = 0,flag = 0;
    26     char ch;
    27     if ((ch = getchar()) == '-')flag = 1;
    28     else if(ch >= '0' && ch <= '9')res = ch - '0';
    29     while ((ch = getchar()) >= '0' && ch <= '9')res = (res<<1) + (res<<3) + (ch - '0');
    30     return flag ? -res : res;
    31 }
    32 int r,g,b;
    33 int x[205],y[205],z[205];
    34 ll dp[205][205][205];
    35 bool cmp(int a,int b)
    36 {
    37     return a>b;
    38 }
    39 int main()
    40 {
    41     cin>>r>>g>>b;
    42     for(int i=1;i<=r;i++){
    43         x[i]=rd();
    44     }
    45     for(int i=1;i<=g;i++){
    46         y[i]=rd();
    47     }
    48     for(int i=1;i<=b;i++){
    49         z[i]=rd();
    50     }
    51     sort(x+1,x+r+1,cmp);
    52     sort(y+1,y+g+1,cmp);
    53     sort(z+1,z+b+1,cmp);
    54     dp[0][0][0]=0;
    55     ll ans=0;
    56     for(int i=0;i<=r;i++){
    57         for(int j=0;j<=g;j++){
    58             for(int k=0;k<=b;k++){
    59                 dp[i+1][j+1][k]=max(dp[i+1][j+1][k],dp[i][j][k]+x[i+1]*y[j+1]);
    60                 dp[i][j+1][k+1]=max(dp[i][j+1][k+1],dp[i][j][k]+y[j+1]*z[k+1]);
    61                 dp[i+1][j][k+1]=max(dp[i+1][j][k+1],dp[i][j][k]+x[i+1]*z[k+1]);
    62                 ans=max(ans,max(dp[i+1][j+1][k],max(dp[i+1][j][k+1],dp[i][j+1][k+1])));
    63             }
    64         }
    65     }
    66     cout<<ans;
    67     return 0;
    68 }
    View Code
    越自律,越自由
  • 相关阅读:
    组织行为学对项目管理的意义(2):人格的大五模型 . 分类: 项目管理 2014-06-25 19:10 308人阅读 评论(0) 收藏
    组织行为学对项目管理的意义(2):人格的大五模型 . 分类: 项目管理 2014-06-25 19:09 267人阅读 评论(0) 收藏
    组织行为学对项目管理的意义(1) . 分类: 项目管理 2014-06-25 19:08 273人阅读 评论(0) 收藏
    管理中第一可怕之事(3) . 分类: 项目管理 2014-06-25 18:54 257人阅读 评论(0) 收藏
    腾讯是如何一刀刀,在15年间干死那些竞争对手的?! (zz)
    北京、上海家庭年收入情况统计 (zz)
    追求成功还是避免失败 (zz)
    如何获取codeforces的完整数据
    整形范围记忆和注意事项
    位运算的一种应用 和 hiho1516过河解题报告
  • 原文地址:https://www.cnblogs.com/ha-chuochuo/p/13550623.html
Copyright © 2011-2022 走看看