• Codeforce Round #538(Div2)


    比赛链接:https://codeforces.com/contest/1114

    B.(字丑求轻喷QAQ)

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 #define pii pair<int,int>
     4 using namespace std;
     5 const int maxn=2e5+6;
     6 vector<pii>v;
     7 int n,m,k;
     8 int main()
     9 {
    10     cin>>n>>m>>k;
    11     for(int i=1;i<=n;++i)
    12     {
    13         int a;cin>>a;
    14         v.push_back(make_pair(a,i));
    15     }
    16     sort(v.begin(),v.end(),greater<pii>());
    17     ll sum=0;
    18     vector<int>div;
    19     for(int i=0;i<m*k;++i)
    20     {
    21         sum+=v[i].first;
    22         div.push_back(v[i].second);
    23     }
    24     cout<<sum<<endl;
    25     sort(div.begin(),div.end());
    26     for(int i=m-1;i<div.size()-1;i+=m)
    27     {
    28         printf("%d ",div[i]);
    29     }
    30     return 0;
    31 }

        

    C.

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 ll n,b;
     5 int main()
     6 {
     7     cin>>n>>b;
     8     ll ans=1e18;
     9     for(ll i=2;i<=b;++i)
    10     {
    11         ll cnt=0;
    12         if(i*i>b) i=b;
    13         while(b%i==0) {cnt++;b/=i;}
    14         if(cnt==0) continue;
    15         ll tmp=0,base=1;            //    ll tmp=0;base=i;
    16         while(base<=n/i)            //    while(base<=n)
    17         {                            //    {
    18             base*=i;                //        tmp+=n/base;
    19             tmp+=n/base;            //        base*=i;
    20         }                            //    }
    21         ans=min(ans,tmp/cnt);        //    这样看起来更好理解,但是...爆了long long,要修改
    22     }
    23     cout<<ans<<endl;
    24 }

     4.

    一道dp问题(据说有LCS做法,我还没学会emmmm)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=5e3+6;
     4 int dp[maxn][maxn][2];
     5 int col[maxn];
     6 int main()
     7 {
     8     int n; cin>>n;
     9     for(int i=1;i<=n;i++)
    10     {
    11         cin>>col[i];
    12     }
    13     for(int i=0;i<maxn;++i) for(int j=0;j<maxn;++j){dp[i][j][0]=1e9;dp[i][j][1]=1e9;} //初始化
    14     for(int i=0;i<maxn;++i) {dp[i][i][0]=0;dp[i][i][1]=0;}
    15     for(int i=n;i>=1;i--) for(int j=i+1;j<=n;j++)
    16     {
    17         dp[i][j][0]=min({dp[i][j][0],dp[i+1][j][0]+(col[i]!=col[i+1]),dp[i+1][j][1]+(col[i]!=col[j])});
    18         dp[i][j][1]=min({dp[i][j][1],dp[i][j-1][1]+(col[j-1]!=col[j]),dp[i][j-1][0]+(col[i]!=col[j])});
    19         // 更容易理解的做法:                                                                      //先求解向前扩展
    20         // int t0=min( dp[i+1][j][0]+ !(col[i]==col[i+1]) , dp[i+1][j][1]+ !(col[i]==col[j])); //t0表示位置 [i+1][j] 的最小值
    21         // dp[i][j][0]=min(dp[i][j][0],t0);                                                    //dp[i][j][0]为 min(位置[i+1][j],位置[i][j])
    22                                                                                                //向后扩展是一样的
    23         // int t1=min( dp[i][j-1][1]+ !(col[j]==col[j-1]) , dp[i][j-1][0]+ !(col[i]==col[j]));
    24         // dp[i][j][1]=min(dp[i][j][1],t1);                                         
    25         //对于 dp[i+1][j][1]+ !(col[i]==col[j]) 和 dp[i][j-1][0]+ !(col[i]==col[j]) 的解释:
    26         //拿第一个作为例子,dp[i+1][j][1]是向右扩展的,所以比较标准是右端的col[j],而不是之前的col[i]和col[i+1]比较
    27     }
    28     cout<<min(dp[1][n][0],dp[1][n][1]);
    29     return 0;
    30 }

      

  • 相关阅读:
    BZOJ 1631 Cow Party
    BZOJ 1927 星际竞速
    BZOJ 4059 Non-boring sequences
    BZOJ 1562 变换序列
    BZOJ 4417 超级跳马
    484586
    背板问题之满包问题
    对01背包路径的记录
    带权值的图 BFS
    漫步校园 杭电1428
  • 原文地址:https://www.cnblogs.com/codeoosacm/p/10374135.html
Copyright © 2020-2023  润新知