【CCFCSP】2209真题笔记

发布时间 2023-12-08 21:35:36作者: Wennz-y

-1.如此编码

分析

  • daisuki代数题了,直接无脑套公式

  • 子任务有提示,记得参考

测试数据:

15 32767
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

预期结果:

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

AC:

#include<iostream>
using namespace std;
const int maxn=25;
int n,m,tmp;
int a[maxn],b[maxn];
int c=1,tc=1;

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        tc=c*a[i];
        b[i]=(m%tc)/c;
        cout<<b[i]<<' ';
        c=tc;
    }
    return 0;
}

-2.何以包邮

分析

  • 甚至还给我提示,他真的,我哭死

  • 天哪这道题真的太典了

  • 跟好几个不爱做题的哥们分享这道题,做过的都说好

  • 谁不做谁血亏

  • 离散化的思想直接震掉我下巴

测试数据:

4 100
20
90
60
60

期待结果:

110

UNAC:10昏

  • 没考虑单本书直接包邮

  • 缺少枚举

#include<bits/stdc++.h>
using namespace std;
int n,x,m=0,flag=0;
int minm;
const int N=35;
int a[N];

int main(){
    cin>>n>>x;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        minm=x;
        if(a[i]<x) m+=a[i];
        else{
            minm=min(minm,a[i]);
            flag=1;
            break;
        }
        if(m>=x) break;
    }
    if(flag)
        cout<<minm;
    else cout<<m;
    return 0;
}

AC:离散化

  • TQL

  • 想到这种办法的人可真聪明

    • 写第一遍M少开了个0,只有15分。。。?
#include<bits/stdc++.h>
using namespace std;
int n,x,minn;
const int M=300005;
int a[35];
int conv[M];
int f[M];

int main(){
    cin>>n>>x;
    for(int i=1;i<=n;i++)
        cin>>a[i];

    //开始枚举:神来之笔
    f[0]=1;
    for(int i=1;i<=n;i++)
        for(int j=M;j>=a[i];j--)
            if(f[j-a[i]])
                f[j]=1;

    for(int i=x;i<=M;i++)
        if(f[i]){
            minn=i;
            cout<<minn;
            break;
        }
        
    return 0;
}