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;
}