Codeforces Round #585 (Div. 2) CF1215A~C

Posted yoududezongzi

tags:

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

CF1215A. Yellow Cards简单的模拟,给定了黄票张数,判断最少和最多有多少人被罚下场。

技术图片
#include <bits/stdc++.h>
using namespace std;
int main()

    int a,b,aa,bb,n,nnn;
    cin>>a>>b>>aa>>bb>>n;
    nnn=n;
    int t=(aa-1)*a+(bb-1)*b;
    int tt=0;
    if(aa<=bb)
    
        if(n>=aa*a)
        
            tt+=a;
            n-=aa*a;
        
        else
        
            tt+=n/aa;
            int o=n/aa;
            n-=o*aa;
        
        if(n>=bb*b)
        
            tt+=b;
            n-=bb*b;
        
        else
        
            tt+=n/bb;
            int o=n/bb;
            n-=o*bb;
        
    
    else
    
        if(n>=bb*b)
        
            tt+=b;
            n-=bb*b;
        
        else
        
            tt+=n/bb;
            int o=n/bb;
            n-=o*bb;
        
        if(n>=aa*a)
        
            tt+=a;
            n-=aa*a;
        
        else
        
            tt+=n/aa;
            int o=n/aa;
            n-=o*aa;
        
    
    if(t>=nnn)
    
        cout<<"0 "<<tt<<endl;
    
    else
    
        cout<<min(nnn-t,a+b)<<" "<<tt<<endl;
    
    return 0;
A. Yellow Cards

CF1215B. The Number of Products,我们以第一位数到最后一位数的乘积来分析,1-n的状态数分别是n n-1 n-2……1。

观察易得减少一个正数时,正数的状态-1,减少一个负数时,负数的状态数-1,并正负状态交换,即可O(n)递推求出答案

技术图片
#include <bits/stdc++.h>
using namespace std;
int a[2000005];
typedef long long ll;
int main()

    int n;
    cin>>n;
    ll l=0,r=0;
    ll tt=1;
    for(int i=1;i<=n;++i)
    
        ll t;
        cin>>t;
        if(t>0)
        
            a[i]=1;
        
        else
        
            a[i]=-1;
        
        tt*=a[i];
        if(tt>0)
        
            l++;
        
        else
        
            r++;
        
    
    ll al=l,ar=r;
    for(int i=2;i<=n;++i)
    
        if(a[i-1]>0)
        
            l--;
        
        else
        
            r--;
            swap(l,r);
        
        al+=l;
        ar+=r;
    
    cout<<ar<<" "<<al;
    return 0;
B. The Number of Products

CF1215C. Swap Letters 首先只有ab和ba出现的次数为奇数不成立,其余时候ab\ba可和ab\ba一次配对,ab和ba需要两次这里我用了vecotr来避免重复使用

技术图片
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<int>vt1;
vector<int>vt2;
int main()

    int n,aaa=0;
    cin>>n;
    string str1,str2;
    cin>>str1>>str2;
    int flag=0;
    for(int i=0;i<str1.size();++i)
    
        if(str1[i]==a&&str2[i]==a)
        
            flag++;
        
        if(str1[i]==b&&str2[i]==b)
        
            flag++;
        
    
    flag=n-flag;
    if(flag%2!=0)
    
        cout<<-1;
        return 0;
    
    for(int i=0;i<str1.size();++i)
    
        if(str1[i]==a&&str2[i]==b)
        
            vt1.push_back(i);
        
        if(str2[i]==a&&str1[i]==b)
        
            vt2.push_back(i);
        
    
    for(int i=vt1.size()-1;i>=0;i-=2)
    
        int j=i-1;
        if(j>=0)
        
            aaa++;
            vt1.pop_back();
            vt1.pop_back();
        
    
    for(int i=vt2.size()-1;i>=0;i-=2)
    
        int j=i-1;
        if(j>=0)
        
            aaa++;
            vt2.pop_back();
            vt2.pop_back();
        
    
    if(vt1.size())
    
        int i=vt1.size()-1;
        int j=vt2.size()-1;
        aaa++;
        aaa++;
    
    cout<<aaa<<endl;
    vt1.clear();
    vt2.clear();
    for(int i=0;i<str1.size();++i)
    
        if(str1[i]==a&&str2[i]==b)
        
            vt1.push_back(i);
        
        if(str2[i]==a&&str1[i]==b)
        
            vt2.push_back(i);
        
    
    for(int i=vt1.size()-1;i>=0;i-=2)
    
        int j=i-1;
        if(j>=0)
        
            cout<<vt1[j]+1<<" "<<vt1[i]+1<<endl;
            vt1.pop_back();
            vt1.pop_back();
        
    
    for(int i=vt2.size()-1;i>=0;i-=2)
    
        int j=i-1;
        if(j>=0)
        
            cout<<vt2[j]+1<<" "<<vt2[i]+1<<endl;
            vt2.pop_back();
            vt2.pop_back();
        
    
    if(vt1.size())
    
        int i=vt1.size()-1;
        int j=vt2.size()-1;
        cout<<vt1[i]+1<<" "<<vt1[i]+1<<endl;
        cout<<vt1[i]+1<<" "<<vt2[j]+1<<endl;
    
    return 0;
C. Swap Letters

 

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

Codeforces Round #585 (Div. 2) D. Ticket Game

Codeforces Round #585 (Div. 2)

CodeForces Round #585 (Div 2)

Codeforces Round #585 (Div. 2)

Codeforces Round #585 (Div. 2) B.The Number of Products(动态规划)

Codeforces Round #585 (Div. 2) CF1215A~C