2016.11.6 night NOIP模拟赛 考试整理

题目+数据:链接:http://pan.baidu.com/s/1hssN8GG 密码:bjw8
总结:

总分:300分,仅仅拿了120份。

这次所犯的失误:对于2,3题目,我刚刚看就想到了正确思路,急于敲正确思路,而没有去骗基础得分。

结果第二题DP打残了,第三题排列组合漏了一个小点没考虑到,都是仅仅拿了10分。

T1:

 1 /*
 2 第一题比较容易,注意一些细节就可以了。
 3 比如删除前导0不能删没了等等。
 4 */
 5 #define N 1500
 6 #include<iostream>
 7 using namespace std;
 8 #include<cstdio>
 9 #include<cstring>
10 char a[N],b[N];
11 int a1[N],b1[N],len;
12 void input()
13 {
14     scanf("%s%s",a+1,b+1);
15     len=strlen(a+1);
16     for(int i=1;i<=len;++i)
17       a1[i]=a[i]-‘0‘;
18     for(int i=1;i<=len;++i)
19       b1[i]=b[i]-‘0‘;
20 }
21 int main()
22 {
23     freopen("number.in","r",stdin);
24     freopen("number.out","w",stdout);
25     input();
26     for(int i=1;i<=len;++i)
27     {
28         if(a1[i]>b1[i]) b1[i]=11;
29         if(a1[i]<b1[i]&&b1[i]!=11) a1[i]=11;
30     }
31     int ia=1,ib=1;
32     bool flag=false;
33     while(ia<len&&(a1[ia]==0||a1[ia]==11))
34     {
35          if(a1[ia]==0) flag=true;
36          ia++;
37     }
38     if(a1[ia]==11) ia++;
39     if(ia>len&&(!flag)) printf("BOOM");
40     else{
41         for(int i=ia;i<=len;++i)
42            if(a1[i]!=11) printf("%d",a1[i]);
43         if(ia>len&&flag) printf("0");
44     }
45     printf("\n");
46     flag=false;
47     while(ib<len&&(b1[ib]==0||b1[ib]==11))
48     {
49         if(b1[ia]==0) flag=true;
50         ib++;
51     }
52     if(b1[ib]==11) ib++;
53     if(ib>len&&(!flag)) printf("BOOM");
54     else{
55         for(int i=ib;i<=len;++i)
56           if(b1[i]!=11) printf("%d",b1[i]);
57         if(ib>len&&flag) printf("0");
58     }
59     fclose(stdin);
60     fclose(stdout);
61     return 0;
62 }

T2:正确做法所用的技巧和NOIP2015Day2子串相同都用到了辅助数组。

哎╮(╯▽╰)╭圆形操场不是成环考虑的。

说明:测试数据中有两组是有问题的,就是当出现偶数组合并不了的时候,是输出了最大值。而zhx大牛的最大值是1e9,因人而异吧。

 1 #define N 405
 2 #include<iostream>
 3 using namespace std;
 4 #include<cstdio>
 5 #include<cstring>
 6 typedef long long ll;
 7 int n,sum[N];
 8 ll f1[N][N],f2[N][N];
 9 void input()
10 {
11     scanf("%d",&n);
12     int x;
13     for(int i=1;i<=n;++i)
14     {
15         scanf("%d",&x);
16         sum[i]=sum[i-1]+x;
17     }
18 }
19 void DP()
20 {
21     for(int i=1;i<=n;++i)
22       for(int j=1;j<=n;++j)
23          f1[i][j]=f2[i][j]=(1<<31)-1;
24     for(int i=1;i<=n-1;++i)
25       f2[i][i+1]=sum[i+1]-sum[i-1];
26     for(int i=1;i<=n;++i)
27       f1[i][i]=0;
28     for(int len=3;len<=n;++len)
29       for(int i=1;i+len-1<=n;++i)
30       {
31           int j=i+len-1;
32           for(int k=i;k<j;++k) f2[i][j]=min(f2[i][j],f1[i][k]+f1[k+1][j]+sum[j]-sum[i-1]);
33           for(int k=i;k<j;++k) f1[i][j]=min(f1[i][j],f2[i][k]+f1[k+1][j]+sum[j]-sum[k]);
34           /*注意这个推f1这个方程中,所加的代价是sum[j]-sum[k],因为i---k-1,这段石子的花费,我们在推f2的时候已经加过了,所以不能重复加了*/
35       }
36 }
37 int main()
38 {
39     freopen("merge.in","r",stdin);
40     freopen("merge.out","w",stdout);
41     input();
42     DP();
43     cout<<f1[1][n]<<endl;
44     fclose(stdin);
45     fclose(stdout);
46     return 0;
47 }

T3:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 typedef long long ll;
 5 #define rep(i,a,n) for(int i=a;i<=n;i++)
 6 ll pp=1000000007;
 7 ll mo(ll a,ll pp){if(a>=0 && a<pp)return a;a%=pp;if(a<0)a+=pp;return a;}
 8 ll powmod(ll a,ll b,ll pp)
 9 {ll ans=1;
10 for(;b;b>>=1,a=mo(a*a,pp))
11 if(b&1)ans=mo(ans*a,pp);
12 return ans;}
13 ll gcd(ll a,ll b){return (!b)?a:gcd(b,a%b);}
14 ll read(){
15     ll ans=0;
16     char last=‘ ‘,ch=getchar();
17     while(ch<‘0‘ || ch>‘9‘)last=ch,ch=getchar();
18     while(ch>=‘0‘ && ch<=‘9‘)ans=ans*10+ch-‘0‘,ch=getchar();
19     if(last==‘-‘)ans=-ans;
20     return ans;
21 }
22 int n,m,p1[110000],p2[110000];
23 ll b[110000],inv[110000];
24 ll C(int n,int m){
25     if(n<m || n==0)return 0;
26     return  b[n]*inv[n-m]%pp*inv[m]%pp;
27 }
28 int main(){
29     freopen("problem.in","r",stdin);
30     freopen("problem.out","w",stdout);
31     n=read();m=read();
32     b[0]=1;
33     rep(i,1,n)b[i]=b[i-1]*i%pp;
34     rep(i,0,n)inv[i]=powmod(b[i],pp-2,pp);
35
36     rep(i,1,m){
37         int x=read(),y=read();
38         if(x==y){
39             puts("0\n");
40             return 0;
41         }
42         p1[x]=1;
43         p2[y]=1;
44     }
45     ll ans=b[n-m];
46     //    cout<<ans<<endl;
47     int s=0;
48     rep(i,1,n)
49         if(!p1[i] && !p2[i])++s;
50     rep(i,1,s)
51         if(i&1)ans=mo(ans-C(s,i)*b[n-m-i],pp);
52         else ans=mo(ans+C(s,i)*b[n-m-i],pp);
53     cout<<ans<<endl;
54     return 0;
55 }
时间: 2024-12-28 15:48:49

2016.11.6 night NOIP模拟赛 考试整理的相关文章

2017 9 11 noip模拟赛T2

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=205; int map[N][N]; int d[N],tag[N],book[N],f[N]; int n,m; void work(int x) { memset(d,63,sizeof(d)); memset(book,0,sizeof(book)); memset(f,0,sizeof(

【简单思考】noip模拟赛 NTR酋长

NTR酋长 (ntr.pas/.c/.cpp) 黄巨大终于如愿以偿的进入了czy的后宫中……但是czy很生气……他要在黄巨大走到他面前的必经之路上放上几个NTR酋长来阻挡黄巨大. 众所周知,NTR酋长有一个技能是沟壑(F).它会在地图上产生一条长长的障碍物阻挡人前进.Czy打算在一个n*m的矩形(必经之路?)中放上NTR酋长.NTR酋长要一个一个放下去,而且每放一个都会向四角倾斜的方向放出无限长的沟壑,而已经被沟壑挡住的地方就不能再放NTR酋长了. 请注意:不会出现沟壑的路径挡住另一个沟壑的情况

NOIP模拟赛 6.29

2017-6-29 NOIP模拟赛 Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走,厉害吧. 早苗的新模型可以按照输入的命令进行移动,命令包括‘E’.‘S’.‘W’.‘N’四种,分别对应东南西北.执行某个命令时,它会向对应方向移动一个单位.作为新型机器人,它可以执行命令串.对于输入的命令串,每一秒它会按命令行动一次.执行完命令串的最后一个命令后,会自动从头开始循环.在0时刻时机器人

【noip模拟赛4】Matrix67的派对 暴力dfs

[noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排在圆桌上.Matrix67的安排原则是,圆桌上任意两个相邻人的身高之差不能超过K.请告诉Matrix67他共有多少种安排方法. 输入 第一行输入两个用空格隔开的数N和K,其中1<=N<=10,1<=K<=1 000 000. 第二行到第N+1行每行输入一个人的身高值.所有人的身高都是不

【noip模拟赛】 射击

这题似乎是什么安阳一中的模拟题,不管了,反正是学长出的noip模拟赛里面的题目.... 射击(shoot.pas/.c/.cpp) 时间限制:1s,内存限制128MB 题目描述: 据史书记载,对越反击战时期,有位中国侦察兵,他的代号叫814.一天他执行狙击任务,他的任务地区是n座恰巧在一条直线上的山.这些山所在直线恰巧为东西走向,山从东到西依次编号为1~n.一天814隐藏在编号为k的山上,每座山上都有1个目标. 814也非常的厉害,任务结束时杀了很多人,可是史书中只记载了两点: 1:814一定攻

NOIP模拟赛

#1[Nescafé 31]杯NOIP模拟赛 t1 题意:n*m的棋盘上从(1,1)走到(n,m),只能向下或向右,一些格子有老鼠,每个老鼠互不相同,当处于与老鼠有重边的格子时,视为看见了这只老鼠,求到终点看到最少的不同老鼠数. 分析:DP 由于求得是看到的不同的老鼠数目,不能直接用过河卒做,因为同一个位置的老鼠可能会统计多次,我们还需要增加一维即方向. f[i,j,0]表示到从上面一个格子走到(i,j)时最少老鼠数,f[i,j,1]表示左边. f[i,j,0]:=min(f[i-1,j,0]+

2012-10-20 NOIP模拟赛

      2012-10-20 NOIP模拟赛 by coolyangzc 共3道题目,时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c/pas exploit.cpp/c/pas 输入文件 type.in num.in exploit.in 输出文件 type.out num.out exploit.out 时间限制 1000MS 1000MS 1000MS 内存限制 256MB 256MB 256MB 测试点 5+(5) 10

liu_runda 给辣鸡蒟蒻做的 NOIP模拟赛 1.0 第二题 任(duty) 题解

问题 B: 任(duty) 时间限制: 2 Sec  内存限制: 512 MB 题目描述 liu_runda退役之后就失去梦想开始咸鱼生活了- Bilibili夏日画板活动中,所有人都可以在一块画板上进行像素画创作.UOJ群有一群无聊的人决定在画板上创作一个50*50的UOJ的LOGO.如下图. 这块画板实际上是很大的矩形网格.一个网格是一像素. 一个人每三分钟才能画一个像素.所以liu_runda的咸鱼生活非常无聊. 郭神表示他实在是看不下去liu_rudna这只颓狗了,于是随手出了一道神题,

2014-9-9 NOIP模拟赛

东方幻想乡系列模拟赛Stage 1命题 Nettle审题 Barty ccy1991911 FlanS39 Wagner T2 高精除高精,从来没写过,不知道怎么写,我就用大数减小数ans次,果断超时. T4 Tarjan的板子题,好久没写,中间出现了一些小错误 ①是尽管有双向边,Tarjan函数中也不必排除双向边 ②Tarjan算法有时候不能一步完成,需要做最多n次,用循环解决 ③问题是关于这个题目的虽然输入n代表有n个点,但是下面的连边中有些点根本没出现过,所以设一个数组记录有效点. Pro