[NOIP2013] 普及组

计数问题

纯模拟

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 int main(){
 5     int n,x;
 6     cin>>n>>x;
 7     int i,c=0;
 8     for(i=1;i<=n;i++){
 9         int a=i;
10         while(a!=0){
11             if(a%10==x)c++;
12             a/=10;
13         }
14     }
15     cout<<c;
16     return 0;
17 }

计数问题

表达式求值

模拟计算,扫一遍出解

 1 /*NOIP2013普及组t2 洛谷P1981 表达式求值*/
 2 /**/
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<cstring>
 6 #include<cstdio>
 7 #include<cmath>
 8 using namespace std;
 9 char last;
10 char c;
11 int x=0;
12 int a=0,b=1;
13 int sum=0;
14 int main(){
15     int i,j;
16     bool flag=1;
17     do{
18         if(cin>>c);
19         else{
20             flag=0;
21             c=‘+‘;
22         }
23         if(c>=‘0‘ && c<=‘9‘)x=x*10+c-‘0‘;
24         else{
25             a=x;
26             x=0;
27         }
28         if(c==‘*‘){
29             last=1;
30             b=(a*b)%10000;
31         }
32         if(c==‘+‘){
33             if(last){
34                 a=(a*b)%10000;
35                 sum=(sum+a)%10000;
36                 b=1;
37                 last=0;
38             }
39             else sum+=a;
40         }
41
42     }while(flag==1);
43     printf("%d",sum%10000);
44     return 0;
45 }

表达式求值

小朋友的数字

线性DP

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 using namespace std;
 6 const long long inf=1000000005;
 7 int n,p,a[1000500];
 8
 9 long long su[1000500]={0};//特征值
10 long long scoremx=-inf;//前排最大分数
11 long long dmx=-inf;
12 long long ans=-inf;
13 int sum1(){
14     int i,j;
15     long long s=0;
16     long long mx=-inf;
17     for(i=1;i<=n;i++){
18         if(s+a[i]>mx)mx=s+a[i];
19         su[i]=mx;
20         if(s+a[i]>0) s+=a[i];
21         else s=0;
22     }
23     //
24     for(i=1;i<=n;i++){
25         su[i]%=p<<1;
26     }
27     return 0;
28 }
29 int main(){
30     int i,j;
31     scanf("%d%d",&n,&p);
32     for(i=1;i<=n;i++)scanf("%d",&a[i]);
33     sum1();
34     long long score;
35 //1
36     scoremx=su[1];
37     score=su[1];
38     dmx=score+su[1];
39 //end
40     for(i=2;i<=n;i++){
41         score=dmx;
42         if(dmx>scoremx)scoremx=dmx;
43         if(su[i]+score>dmx)dmx=su[i]+score;
44     }
45     printf("%d",scoremx%p);
46     return 0;
47 }

小朋友的数字

车站分级

从已知的低级站向高级站连边,跑拓扑排序得出层级关系

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 using namespace std;
 7 int n,m;
 8 int a;//[第i趟车次的停靠站数]
 9 int s[2000];//[第i趟车次停靠的站]
10 int mp[1200][1200]={0};
11 int book[1200];
12 int r[1200],c[1200];
13 int st[1200];
14 int ans=0;
15 void rd(){
16     scanf("%d%d",&n,&m);
17     int i,j,k;
18     for(i=1;i<=m;i++){
19         memset(book,0,sizeof(book));
20         scanf("%d",&a);
21         for(j=1;j<=a;j++){
22             scanf("%d",&s[j]);
23             book[s[j]]=1;
24         }
25         for(k=s[1];k<=s[a];k++)//遍历从始发站到终点站
26         {
27             if(!book[k])
28                 for(j=1;j<=a;j++)
29                 if(!mp[k][s[j]])//从低级连到高级可过,从高级连到低级超时
30                 {
31                  mp[k][s[j]]=1;
32                  r[s[j]]++;}
33         }
34
35     }
36 }
37 int main(){
38 //    freopen("level.in","r",stdin);
39 //    freopen("level.out","w",stdout);
40     rd();
41     int i,j;
42     int top=0;
43     memset(book,0,sizeof(book));
44     while(1){
45         ans++;
46         top=0;
47         for(i=1;i<=n;i++)
48             if(!r[i] && !book[i])
49             {
50                 top++;
51                 st[top]=i;
52                 book[i]=1;
53             }
54
55         if(!top)break;
56         for(j=1;j<=n;j++)
57           for(i=1;i<=top;i++){
58               if(mp[st[i]][j]){
59                   mp[st[i]][j]=0;
60                   r[j]--;
61               }
62           }
63         if(!top)break;
64     }
65
66     printf("%d",ans-1);
67
68
69     return 0;
70 }
时间: 2024-10-26 18:38:28

[NOIP2013] 普及组的相关文章

洛谷 P1982 小朋友的数字(NOIp2013普及组T3)

题目描述 有 n 个小朋友排成一列.每个小朋友手上都有一个数字,这个数字可正可负.规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值. 作为这些小朋友的老师,你需要给每个小朋友一个分数,分数是这样规定的:第一个小朋友的分数是他的特征值,其它小朋友的分数为排在他前面的所有小朋友中(不包括他本人),小朋友分数加上其特征值的最大值. 请计算所有小朋友分数的最大值,输出时保持最大值的符号,将其绝对值对 p 取模后输出. 输入输出格式 输入格式

noip2013普及组 小朋友的数字

P1982 小朋友的数字 题目描述 有 n 个小朋友排成一列.每个小朋友手上都有一个数字,这个数字可正可负.规定每个 小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋 友手上的数字之和的最大值. 作为这些小朋友的老师,你需要给每个小朋友一个分数,分数是这样规定的:第一个小 朋友的分数是他的特征值,其它小朋友的分数为排在他前面的所有小朋友中(不包括他本人), 小朋友分数加上其特征值的最大值. 请计算所有小朋友分数的最大值,输出时保持最大值的符号,将其绝对值对 p 取

[NOIp2013普及组]车站分级

思路: 对于每一趟车,将区间内所有经停的站和所有未经停的站连一条边,表示前者优先级一定高于后者,然后用Kahn跑一遍拓扑排序即可.然而这样会创造大量多余的边,会TLE1个点.考虑一种优化:因为每趟车本身也有一个优先级,因此可以将这趟车也看作一个点,每次先所有将经停的站连一条边到这两车上,表示这些站的优先级一定大于等于车的优先级,再将车连若干边到未经停的点,表示车的优先级一定大于未经停的站的优先级. 1 #include<queue> 2 #include<cstdio> 3 #in

Noip2013(普及组) 车站分级

题目描述 一条单向的铁路线上,依次有编号为 1, 2, -, n 的 n 个火车站.每个火车站都有一个级别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 x,则始发站.终点站之间所有级别大于等于火车站 x 的都必须停靠.(注意:起始站和终点站自然也算作事先已知需要停靠的站点) 例如,下表是 5 趟车次的运行情况.其中,前 4 趟车次均满足要求,而第 5 趟车次由于停靠了 3 号火车站(2 级)却未停靠途经的 6 号火车站(亦为 2 级)而不满足要

2017年8月14日套题记录 | 普及组

写在前面 今天登洛谷发现离Noip剩下88天了??(虽然看起有点久),然后觉得似乎水了一个暑假什么也没做(虽然学了点数据结构和一些奇奇Gaygay的东西),于是打开题库发现去年Long Happy的集训套题我似乎没有提交过,那就一天一套题,顺便码个题解+心得(雾? T2.传作业 题目描述 某十三同学一日上学迟到,此时已经开始上早自习了,所以他只好请同学帮忙把作业传到组长那里.由于刚开学不久,某十三同学还没来得及认识所有同学,所以传作业时只好找熟悉的同学.已知某十三与组长之间有N个他熟悉的同学,并

1143 纪念品分组 2007年NOIP全国联赛普及组

1143 纪念品分组 2007年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数.为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少. 你的任务是写一个程序

采药 2005年NOIP全国联赛普及组&amp;疯狂的采药

时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:"孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值.我会给你一段时间,在这段时间里,你可以采到一些草药.如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大."

NOIP2008 普及组T2 排座椅 解题报告-S.B.S

题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳.同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵向的通道.于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么

noip2008普及组3题题解-rLq

(第一次写题解,随意喷) (只是前一天的作业哈) (先凑个数) 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师在此吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目.聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次