【noip 2016】普及组

T1.买铅笔

题目链接

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 int n,p,w,ans=0x3f3f3f3f;
 6 int read()
 7 {
 8     int x=0,f=1;char c=getchar();
 9     while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
10     while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
11     return x*f;
12 }
13 int main()
14 {
15     n=read();
16     for(int i=1;i<=3;i++)
17     {
18         w=read(),p=read();
19         if(n%w)w=n/w+1;
20         else w=n/w;
21         ans=min(ans,w*p);
22     }
23     printf("%d",ans);
24     return 0;
25 }

T2.回文日期

题目链接

直接枚举年份,再判断日期是否合法就好了……然而我居然还WA了一发(好菜啊

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int d1,d2,ans;
 6 int read()
 7 {
 8     int x=0,f=1;char c=getchar();
 9     while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
10     while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
11     return x*f;
12 }
13 int rev(int x)
14 {
15     int s[5],ans=0;
16     for(int i=1;i<=4;i++)s[i]=x%10,x/=10;
17     for(int i=1;i<=4;i++)ans=ans*10+s[i];
18     return ans;
19 }
20 bool pan(int y,int m,int d)
21 {
22     int day=31;
23     if(m==4||m==6||m==9||m==11)day=30;
24     if(m==2)
25     {
26         if((y%4==0&&y%100!=0)||y%400==0)day=29;
27         else day=28;
28     }
29     if(m<1||m>12||d<1||d>day)return false;
30     return true;
31 }
32 int main()
33 {
34     d1=read();d2=read();
35     for(int i=d1/10000;i<=d2/10000;i++)
36     {
37         int t=i*10000+rev(i);
38         if(pan(i,(t/100)%100,t%100)&&t>=d1&&t<=d2)ans++;
39     }
40     printf("%d",ans);
41     return 0;
42 }

T3.海港

题目链接

因为保证输入的ti是递增的,所以开一个队列瞎搞就好了?

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int n,k,t,ans,nat[100050];
 6 struct node{int t,nat;}q[300050];
 7 int read()
 8 {
 9     int x=0,f=1;char c=getchar();
10     while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
11     while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
12     return x*f;
13 }
14 int main()
15 {
16     n=read();
17     int head=0,tail=0;
18     while(n--)
19     {
20         t=read();k=read();
21         while(k--)
22         {
23             q[++tail].nat=read();
24             if(!nat[q[tail].nat])ans++;
25             nat[q[tail].nat]++;
26             q[tail].t=t;
27         }
28         while(q[head].t<=t-86400)
29         {
30             nat[q[head].nat]--;
31             if(!nat[q[head].nat])ans--;
32             head++;
33         }
34         printf("%d\n",ans);
35     }
36     return 0;
37 }

T4.魔法阵

题目链接

据题意得,x?b???x?a??=2(x?d???x?c??),x?c???x?b??>6(x?d???x?c??),即总距离s>9(x?d???x?c??);

另,魔法值相同的物品所需要输出的答案是一样的;

所以可以先枚举(x?d???x?c??),再倒序枚举a的位置并推算出b及最小的合法c、d的位置并进行计算(倒序是为了使前面枚举过的c、d位置合法,方便累加);同理,正序枚举d的位置并推算出c及最大的合法a、b的位置并进行计算。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N=15050;
 6 int n,m,num,xa,xb,xc,xd;
 7 int w[N],a[N],b[N],c[N],d[N],id[40050];
 8 int read()
 9 {
10     int x=0,f=1;char c=getchar();
11     while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
12     while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
13     return x*f;
14 }
15 int main()
16 {
17     n=read();m=read();
18     for(int i=1;i<=m;i++)
19     {
20         id[i]=read();
21         w[id[i]]++;
22     }
23     for(int i=1;i<=n/9;i++)
24     {
25         num=0;
26         for(xa=n-9*i-1;xa>=1;xa--)
27         {
28             xb=xa+2*i;xc=xb+6*i+1;xd=xc+i;
29             num+=w[xc]*w[xd];
30             a[xa]+=w[xb]*num;
31             b[xb]+=w[xa]*num;
32         }
33         num=0;
34         for(xd=9*i+1;xd<=n;xd++)
35         {
36             xc=xd-i;xb=xc-6*i-1;xa=xb-2*i;
37             num+=w[xa]*w[xb];
38             c[xc]+=w[xd]*num;
39             d[xd]+=w[xc]*num;
40         }
41     }
42     for(int i=1;i<=m;i++)
43         printf("%d %d %d %d\n",a[id[i]],b[id[i]],c[id[i]],d[id[i]]);
44     return 0;
45 }

时间: 2024-10-16 21:19:41

【noip 2016】普及组的相关文章

NOIP 2016 普及组Solution

第一题 直接贴Code: 1 #include <cstdio> 2 int min(int a,int b) 3 { 4 return a<b?a:b; 5 } 6 using namespace std; 7 int main() 8 { 9 int n,a1,a2,b1,b2,c1,c2,ans; 10 scanf("%d%d%d%d%d%d%d",&n,&a1,&a2,&b1,&b2,&c1,&c2);

[Wikioi 2808][NOIP 1998普及组]二的幂次方---HBNU的童鞋过来看看

转载请说明出处:http://blog.csdn.net/cywosp/article/details/27095723 <黑天鹅--如何应对不可预知的未来> 作者:纳西姆?尼古拉斯?塔勒布 关于黑天鹅 在发现澳大利亚黑天鹅之前,所有欧洲人都确信天鹅全部都是白色的,人们在经过上百万次的确定性观察白天鹅之后得到了这一结论,而且一直延续了上千年,直到黑天鹅的出现,从而将这一结论完全打破.通过黑白天鹅的现象说明我们通过观察或经验获得的知识具有严重的局限性和脆弱性,仅仅一次的完全不同的发现就足以颠覆根

模拟(玩具谜题NOIP 2016 提高组 Day 1 第一题vijos2003)

描述 小南有一套可爱的玩具小人,它们各有不同的职业. 有一天,这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉小南一个谜题:“眼镜藏在我左数第3个玩具小人的右数第1个玩 具小人的左数第2个玩具小人那里.” 小南发现,这个谜题中玩具小人的朝向非常关键,因为朝内和朝外的玩具小人的左右方向是相反的:面朝圈内的玩具小人,它的左边是顺时针方向,右边是逆时针方向:而面向圈外的玩具小人,它的左边是逆时针方向,右边是顺时针方向. 小

曹文夏令营 2016 普及组 第贰轮 游戏

游戏 以下是原题 [问题描述]/*"Ran,今天我要在Hakase 家打游戏,不回来了.""Ran,Hakase 新发明了游戏,我今天住博士家.""Ran,Conan 今天要在我家通宵打游戏."终于有一天,电脑被打坏了--2333所以Conan 要前往专卖店买新的,正好专卖店正在促销,*/ 一共有三种礼包:豪华礼包:一个U 盘.一个鼠标和一个机械键盘.幸运礼包:一个U 盘.两个鼠标.普通礼包:两个U 盘.一个鼠标.卖店内准备了a 个U 盘.b 个

noip 2016 提高组试题看法

前几天写的那个纯属搞笑.(额,好吧,其实这个也不怎么正经) 就先说说day2吧: T1:这个东西应该叫做数论吧. 然而我一看到就照着样例在纸上推了大半天(然而还是没有看出来这东西是个杨辉三角) 然后就想干脆先把n≤25的拿了再说(这个爆不了long long) 然后就硬套用那个组合数公式. 再然后,就只拿了35分. T2:我勒个去. 这个东西应该用堆来优化的吧. 然而并不会堆. 然后就切一个遍历一遍把两端都再加进去(虽然我知道这个时间复杂度估计连20都拿不了). 一个估计是正解的东西: 思考一下

noip 2016 提高组总结(不是题解)

小弱鸡杨树辰是第一次参加像noip这样的高大上的比赛,于是他非常,非常,非常激动. 当他第二天考完试后,他正在yy自己的分数:day1T1应该是a掉了,T2写了个30分的暴力,T3也是个40分的暴力,这第一天就能拿到170了,他的心情非常开心,非常非常开心:day2T1应该是50分,T2么,随便拿个25好了,至于T3,呵呵呵呵呵呵呵,爆零就好~我带你去看天荒地老~,咳咳: 这时,一位记者瞄上了他; 记者:"你好这位同学,可以谈一下本次noip的经历么?" ysc:"我么?我可

NOIP 2015普及组复赛Day1 T1 == Codevs4510 神奇的幻方

时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description: 幻方是一种很神奇的N∗N矩阵:它由数字 1,2,3, … … ,N∗N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将 1写在第一行的中间.之后,按如下方式从小到大依次填写每个数(K= 2,3, … ,N∗N ): 1.若 (K−1)在第一行但不在最后一列,则将 填在最后一行,(K−1)所在列的右一列: 2.若 (K

SDNU 1167.花生采摘【NOIP 2004 普及组】【贪心】【8月6】

花生采摘 Description 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:"欢迎免费品尝我种的花生!--熊字". 鲁宾逊先生和多多都很开心,因为花生正是他们的最爱.在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1).有经验的多多一眼就能看出,每棵花生植株下的花生有多少.为了训练多多的算术,鲁宾逊先生说:"你先找出花生最多的植株,去采摘它的花生:然后再找出剩下的植株里花生最多的,去采摘

【NOIP】普及组2011 表达式的值

[算法]动态规划+后缀表达式 [题解] 先把算式转为后缀表达式后进行DP 令f[s][0]表示使表达式答案为0的方案数 f[s][1]表示使表达式答案为1的方案数 (加法) f[a+b][1]=f[a][0]*f[b][1]+f[a][1]*f[b][0]+f[a][1]*f[b][1] f[a+b][0]=f[a][0]*f[b][0] (乘法) f[a+b][0]=f[a][0]*f[b][0]+f[a][0]*f[b][1]+f[a][1]*f[b][0]f[a+b][1]=f[a][1]

[NOIP&#183;2001普及组] 数的划分

[题目描述] 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理: 2.在它的左边加上一个自然数,但该自然数不能超过原数的一半: 4.加上数后,继续按此规则进行处理,直到不能再加自然数为止. [题目分析] 看到这道题,最容易的想法就是递归,也是最简单的方法.只要递归看一下某一个数能不能满足如上条件就行.ans一定要是1,因为不作任何处理算一种处理方式. #include<stdio.h>