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<<"\n";
}
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<<"\n";
    else cout<<cnt+2<<"\n";
}
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))<<"\n";
    return 0;
}
View Code

D. Cow and Fields

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

 

posted @ 2020-03-25 22:44  Kanoon  阅读(152)  评论(0)    收藏  举报