Codeforces Round #621 (Div. 1 + Div. 2)

Posted kanoon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #621 (Div. 1 + Div. 2)相关的知识,希望对你有一定的参考价值。

Codeforces Round #621 (Div. 1 + Div. 2)

A. Cow and Haybales

贪心,移到第一堆的代价即为与第一堆的距离。

技术图片
#include <bits/stdc++.h>
using namespace std;
void solve(){
    int n,d;cin>>n>>d;
    int sum;cin>>sum;
    for(int i=1;i<n;i++){
        int t;cin>>t;
        if(d>0){
            sum+=min(t,d/i);
            d-=t*i;
        }
    }
    cout<<sum<<"
";
}
int main()
{
    int t;cin>>t;
    while(t--)
        solve();
    return 0;
}
View Code

B. Cow and Friend

贪心,考虑能跳的最远距离mx,2*mx内最多跳两次,再加上移动到2*mx内最少需要多少次。

技术图片
#include <bits/stdc++.h>
using namespace std;
void solve(){
    int n,x;cin>>n>>x;
    int a[n];for(int &i:a) cin>>i;
    int mx=*max_element(a,a+n);
    int dis=x,cnt=0;
    if(dis>2*mx) cnt+=(dis-2*mx-1)/mx+1;
    dis-=cnt*mx;
    if(find(a,a+n,dis)!=a+n) cout<<cnt+1<<"
";
    else cout<<cnt+2<<"
";
}
int main()
{
    int t;cin>>t;
    while(t--)
        solve();
    return 0;
}
View Code

C. Cow and Message

长为3的组合不会多于1或2的,更长同理,所以只需考虑长为1和2的最多组合。

技术图片
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    string s;cin>>s;
    ll arr1[26]={0},arr2[26][26]={0};
    for(char c:s){
        int i=c-a;
        for(int j=0;j<26;j++)
            arr2[j][i]+=arr1[j];
        ++arr1[i];
    }
    cout<<max(*max_element(arr1,arr1+26),*max_element(*arr2,*arr2+26*26))<<"
";
    return 0;
}
View Code

D. Cow and Fields

还是不太明白为什么要前后缀距离作差排序,待填。

 

以上是关于Codeforces Round #621 (Div. 1 + Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #621 (Div. 1 + Div. 2) 题解

Codeforces Round #621 (Div. 1 + Div. 2)D dij(思维)

Codeforces Round #621 (Div. 1 + Div. 2)A-C简单记录

Codeforces Round #621 (Div. 1 + Div. 2) D

Codeforces Round #621 (Div. 1 + Div. 2).D. Cow and Fields

Codeforces Round #621 (Div. 1 + Div. 2)B Cow and Friend