2020中南大学大学院学生募集夏キャンプマシン問題(1252~1256)

45291 ワード

A:足りない虹
http://39.106.164.46/problem.php?id=1252 考え方:mapを使えばいいです.ACコード:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 105
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;

int n,flag[10];
string s[MAX];
map<string,int> mp;


int main(){
    mp["red"]=0;mp["orange"]=1;mp["yellow"]=2;
    mp["green"]=3;mp["cyan"]=4;mp["blue"]=5;mp["purple"]=6;
    while(cin>>n){
        memset(flag,0,sizeof(flag));
        for(int i=0;i<n;i++){
            cin>>s[i];
            flag[mp[s[i]]]=1;
        }
        int cnt=0;
        for(int i=0;i<7;i++){
            if(flag[i]==0) cnt++;
        }
        cout<<cnt<<endl;
         for(int i=0;i<7;i++){
            if(flag[i]==0){
                if(i==0) cout<<"A"<<endl;
                else if(i==1) cout<<"B"<<endl;
                else if(i==2) cout<<"C"<<endl;
                else if(i==3) cout<<"D"<<endl;
                else if(i==4) cout<<"E"<<endl;
                else if(i==5) cout<<"F"<<endl;
                else if(i==6) cout<<"G"<<endl;
            }
        }
    }
    return 0;
}

B:最小値と
http://39.106.164.46/problem.php?id=1253 考え方:この問題は2つの数の間の「大きさの関係」を比較します.2020 中南大学研究生招生夏令营机试题(1252~1256)_第1张图片つまり、交換前の価値が交換後の価値より大きい場合は、a1-b1, , , a-bの きいものが に べばいいです.ACコード:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 105
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;

int n;

struct node{
    int fir,sec;
    bool operator < (const node &a) const{
        return fir-sec>a.fir-a.sec;
    }
    node(int f,int s){
        fir=f;
        sec=s;
    }
};

vector<node> vec;

int main(){
    int f,s;
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++){
            scanf("%d %d",&f,&s);
            vec.push_back(node(f,s));
        }
        sort(vec.begin(),vec.end());
        ll res=0;
        for(int i=0;i<n;i++){
            int j=i+1;
            res+=ll(j-1)*vec[i].fir+ll(n-j)*vec[i].sec;
        }
        printf("%lld
"
,res); vec.clear(); } return 0; }
C:PIPI
http://39.106.164.46/problem.php?id=1254 え :シンプルなdp. は の または の によって することができ、それは に を き すことができる.dp[i][j] = (dp[i-1][j] + dp[i][j-1]) %modはテーマが(x 1,y 1)から(x 2,y 2)に したため、(x 1,y 1)を の に し、(x 2,y 2) じ をずらす.つまりdp[x2-(x1-1)][y2-(y1-1)]は な えである.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 5005
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;

int n,m,q,dp[MAX][MAX];
int x1,x2,y_1,y2;
int mod=1e9+7;

int main(){
    memset(dp,0,sizeof(dp));
    for(int i=1;i<MAX;i++) dp[i][1]=1;
    for(int j=1;j<MAX;j++) dp[1][j]=1;
    for(int i=2;i<MAX;i++){
        for(int j=2;j<MAX;j++){
            dp[i][j]=(dp[i-1][j]+dp[i][j-1])%mod;
        }
    }

    while(scanf("%d %d %d",&n,&m,&q)!=EOF){
        for(int i=0;i<q;i++){
            scanf("%d %d %d %d",&x1,&y_1,&x2,&y2);
            x2=x2-x1+1,y2=y2-y_1+1;
            printf("%d
"
,dp[x2][y2]); } } return 0; }
D: と
http://39.106.164.46/problem.php?id=1255 え :Lの を しないと、 の い をできるだけ くする があります. の の さを さいものから きいものまで べ えて、 きいものから さいものまで に んでください.k の があるごとに を ります.Lの を えると、 の が いものがあるので、 ず を めます.したがって、 たちは の の の の さがa[0]+l であればいいです.
コードは の りです
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 100005
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;

int n,k,l,m,a[MAX];

int main(){
    scanf("%d %d %d",&n,&k,&l);
    m=n*k;
    for(int i=0;i<m;i++){
        scanf("%d",&a[i]);
    }
    sort(a,a+m);
    int max_pos=upper_bound(a,a+m,a[0]+l)-a;
    ll ans=0;
    int cnt=0;
    for(int i=m-1;i>=0;i--){
        cnt++;
        if(i<max_pos&&cnt>=k){
            cnt-=k;
            ans+=a[i];
        }
    }
    if(cnt>0) printf("0
"
); // , n else printf("%lld
"
, ans); return 0; }
E:
http://39.106.164.46/problem.php?id=1256
コードは の りです
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 1000005
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;

int n,c,a[MAX];
ll dp[MAX];

int main(){
    ll sum=0;
    multiset<int> s; //   
    scanf("%d %d",&n,&c);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        sum+=a[i];
    }
    for(int i=1;i<=n;i++){
        dp[i]=dp[i-1];
        s.insert(a[i]);
        if(i>c) s.erase(s.find(a[i-c]));
        if(i>=c) dp[i]=max(dp[i],dp[i-c]+(*s.begin()));
    }
    printf("%lld",sum-dp[n]);
    return 0;
}