Contest2670 - 2021ACM俱乐部后备营个人训练赛第11场

Contest2670 - 2021ACM俱乐部后备营个人训练赛第11场

问题 B: 装箱问题

思路

动态规划入门题

代码

#include <bits/stdc++.h>

using namespace std;

int main()
{
    
    
    int m,n,i,j;
    int f[200000];
    int w[35];
    cin>>m>>n;
    for(i=1;i<=n;++i)
        cin>>w[i];
    for(i=1;i<=n;++i)
    {
    
    
        for(j=m;j>=w[i];--j)
        //由于最后要算剩余的,所以从大的开始算
        {
    
    
            if(f[j]<f[j-w[i]]+w[i])//判断剩余箱子容量大于0
            {
    
    
                f[j]=f[j-w[i]]+w[i];
            }
        }
     }
    cout<<m-f[m]<<endl;
    //最后用箱子容量减去最大可装载的重量,即剩余的容量
    return 0;
}

问题 C: 最大公约数和最小公倍数问题

思路

有个性质:x(最大公约数)*y(最小公倍数) = P * Q

看题就知道,肯定得先求求它的最大公约数,写成函数求的,最后再依次枚举即可

代码

#include <bits/stdc++.h>
 
using namespace std;
 
int yue(int a,int b)
{
    
    
    int maxx=max(a,b);
    int minx=min(a,b);
    if(maxx%minx==0)
        return minx;
    else
        return yue(minx,(maxx%minx));
}
 
int main()
{
    
    
    int x,y;
    int count=0;
    cin>>x>>y;
    for(int i=x;i<=y;++i)
    {
    
    
        if(x*y%i==0 && yue(i,x*y/i)==x)
            ++count;
    }
    cout<<count;
    return 0;
}

问题 D: 数的计算

思路

可直接打表(写几组数组你就知道了),也可以算是动态规划叭

代码

#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    
    
    int n,a[1005];
    cin>>n;
    for(int i=1;i<=n;++i){
    
    
        for(int j=1;j<=i/2;++j)//最多拆分成本身的一半
            a[i] += a[j];
    ++a[i];//加上本身
    }
    cout<<a[n];
    return 0;
}
/*
1	2	3	4	5	6	7	8	9
1	2	2	4	4	6	6	10	10
*/

问题 E: 班级对抗

思路

水题,用用数组就行

代码

#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    
    
    int n,a[1000],m,b[1000];
    int ansa=0,ansb=0;
    cin>>n;
    for(int i=0;i<n;++i){
    
    
        cin>>a[i];
        ansa += a[i];
    }
    cin>>m;
    for(int i=0;i<m;++i){
    
    
        cin>>b[i];
        ansb += b[i];
    }
    if(ansa>ansb)
    {
    
    
        cout<<"A"<<endl;
        cout<<ansa<<" "<<ansb;
    }
    else
    {
    
    
        cout<<"B"<<endl;
        cout<<ansa<<" "<<ansb;
    }
    return 0;
}

问题 F: 彩票中奖

思路

水题,数组,选择判断

代码

#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    
    
    int a[7],b[7];
    int qian=0,hou=0;
    for(int i=0;i<7;++i)
        cin>>a[i];
    for(int i=0;i<7;++i)
        cin>>b[i];
 
    for(int i=0;i<5;++i)
        for(int j=0;j<5;++j)
            if(a[i]==b[j])
                ++qian;
    for(int i=5;i<7;++i)
        for(int j=5;j<7;++j)
            if(a[i]==b[j])
                ++hou;
 
    if(qian==5&&hou==2)
        cout<<"5000000";
    else if(qian==5&&hou==1)
        cout<<"250000";
    else if(qian==5&&hou==0 || qian==4&&hou==2)
        cout<<"3000";
    else if(qian==4&&hou==1 || qian==3&&hou==2)
        cout<<"200";
    else if(qian==4&&hou==0 || qian==3&&hou==1 || qian==2&&hou==2)
        cout<<"10";
    else if(qian==3&&hou==0 || qian==1&&hou==2 || qian==2&&hou==1 || qian==0&&hou==2)
        cout<<"5";
    else
        cout<<"0";
    return 0;
}

问题 I: Iroha and Haiku I

思路

简单判断,水题

代码

#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    
    
    int a,b,c;
    cin>>a>>b>>c;
    if(a==5&&b==5&&c==7 || a==5&&b==7&&c==5 || a==7&&b==5&&c==5 || a==5&&b==7&&c==5)
        cout<<"YES";
    else
        cout<<"NO";
    return 0;
}

问题 J: Iroha Loves Strings II

思路

给N个串,每串长度为L,将这n个串按最小字典序连接起来

代码

#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    
    
    int n,l;
    string s[101];
    while(cin>>n>>l)
    {
    
    
        for(int i=0;i<n;++i)
            cin>>s[i];
        sort(s,s+n);
        for(int i=0;i<n;++i)
            cout<<s[i];
        cout<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_51344172/article/details/112992152