欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 15:17:17
...

A. Cow and Haybales

给定数列a,数列长度n、天数d。每天可以把一个搬到相邻的一个。问第一个最大数值。

贪心:数列从下标从2向n遍历,每次将第i堆能够搬到第一堆的最大个数tt是剩余天数d/(i-1),同时记得与min取min。而每次付出的代价是tt×(i-1)

int a[maxn];
int main(){
    int t=ird();
    while(t--){
        int n=ird();
        int d=ird();
        for(int i=1;i<=n;i++){
            a[i]=ird();
        }
        int pre=0;
        for(int i=2;i<=n;i++){
            int tt=min(a[i],d/(i-1));
            if(d>=tt*(i-1)){
                a[1]+=tt;
                d-=tt*(i-1);
            }
            else
                break;
        }
        cout<<a[1]<<endl;
    }
    return 0;

B. Cow and Friend

x轴上给定一点(x,0),要求从(0,0)跳到给定点x。跳跃的长度从给定的数列种选择。求最小跳跃次数。
Codeforces Round #621 (Div. 1 + Div. 2)

贪心:如果x不整除a[i]就相当于构造三角形答案+1,否则就直接直线到达x/a[i]。
注意如果答案是1而又不是直接到达的情况,就比如(13,0),a[i]=15,那么答案++,最后sort一下输出最小值

int a[maxn];
int main(){
    int t=ird();
    while(t--){
        int n=ird();
        int x=ird();
        for(int i=1;i<=n;i++){
 
            a[i]=ird();
            int tt=a[i];
            a[i]=x/a[i]+(x%a[i]!=0);
            if(tt>x)
                a[i]++;
            //cout<<a[i]<<endl;
        }
        sort(a+1,a+1+n);
        cout<<a[1]<<endl;
    }
    return 0;
}

C. Cow and Message

给定字符串s,要求下标为等差数列的子串的个数的最大值

因为有等差数列限制,所以最大值必然在含有一个或者两个字符的子串中(最初想法我也不知道对不对了反正最后想到了前缀和也没有什么gou用)

  • 统计单个字符最大值
  • 仅找当前字符和前面其他字符形成的字符串所产生的最大值
    看看看看知道前缀和有啥用????在线憨憨真的有被气道o都不知道多想想找????气死我了我怎么这么笨
string s;
LL a[30][30];
LL ans=0;
int main(){
    cin>>s;
    int len=s.length();
    map<char,LL> mp;
    for(int i=0;i<len;i++){
        for(int j=0;j<26;j++){
            a[s[i]-'a'][j]+=mp[j+'a'];
            ans=max(ans,a[s[i]-'a'][j]);
        }
        mp[s[i]]++;
        ans=max(ans,mp[s[i]]);
    }
    cout<<ans<<endl;
    return 0;
}

D. Cow and Fields

待补

相关标签: 垃圾分类