NOIP2016 普及组复赛参考解析

题目传送

P1909 [NOIP2016 普及组] 买铅笔

  • 只买一种铅笔,考虑求出每种铅笔需要几套,再求出总价,求最小。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10,INF=0x3f3f3f3f;
int n,a[4],b[4],c[4],ans=INF;

int main() {
    cin>>n;
    for(int i=1; i<=3; i++) {
        cin>>a[i]>>b[i];
        c[i]=ceil(1.0*n/a[i]);
    }
    for(int i=1; i<=3; i++){
        if(ans>c[i]*b[i]) ans=c[i]*b[i];
    }
    cout<<ans;
    return 0;
}

P2010 [NOIP2016 普及组] 回文日期

  • 不错的模拟题,就看如何简化代码书写以及优化
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10,INF=0x3f3f3f3f;
int l,r,a[10],ans=0;
int mon[]={0,31,28,31,30,31,30,31,31,30,31,30,31},f=0;
int main() {
    cin>>l>>r;
    for(int i=l; i<=r; i++){
        int y=i/10000, m=i/100%100, d=i%100;
        // if(m<1 || m>12) continue;// 一点都没有优化,TLE边缘
        if(m>12) y++,m=1,d=1;       // 优化
        if(m==2 && (y%400 || y%4==0&&y%100!=0)) f=1; else f=0;
        if(mon[m]+f<d) continue;

        i=y*10000+m*100+d; // 确定正确日期
        int temp=i, p=0, flag=1;
        while(temp) a[++p]=temp%10, temp/=10;
        for(int i=1; i<=4; i++){
            if(a[i]!=a[9-i]) { flag=0; break; }
        }
        if(flag) ans++;
    }
    cout<<ans;
    return 0;
}

P2058 [NOIP2016 普及组] 海港

P2119 [NOIP2016 普及组] 魔法阵

posted @ 2022-10-21 10:36  HelloHeBin  阅读(168)  评论(0)    收藏  举报