NOIP模拟 8-21 题解

一份模拟题...水得要命真是没谁了。

减法 (sub.c/.cpp)
题目描述
东东在幼儿园刚刚学会了 20 以内的减法,就迫不及待的跑回家要给爸爸出题了。问“10-1”
来考东东爸,东东爸想也没想就说是“1”。东东顿时喜笑颜开,臭爸爸连这都不知道。那你知
道为啥么?嘻嘻,当然这不是题目了。
这回换东东爸出题了:
两个整数 A 和 B,问 A-B 的结果是多少。
其中 1<=A<=101000, 0<=B<=A。
东东一脸懵圈,说:“臭爸爸,我不会,你告诉我结果吧。“ 这回轮到东东爸懵圈了,东东
爸只是随口说的数字,你能帮他么?
输入格式
第一行:A
第二行:B
输出格式
一行一个数字表示 A-B 的结果。
样例输入
10
1
样例输出
9

分析:

赤果果的高精度减法。

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5
 6 using namespace std;
 7 const int MAXN = 10005;
 8
 9 struct bign
10 {
11     bool flag;
12     int num[MAXN];
13     int len;
14
15     bign() {flag = 0;memset(num,0,sizeof(num));len = 0;}
16
17     void clear()
18     {
19         flag = 0;
20         memset(num,0,sizeof(num));
21         len = 0;
22     }
23 };
24
25 bool operator == (bign &a,bign &b)
26 {
27     if(a.len != b.len) return 0;
28     for(int i = a.len;i >= 1;i --)
29         if(a.num[i] != b.num[i])
30             return 0;
31     return 1;
32 }
33
34
35 bign ans;
36
37 bign operator - (bign &a,bign &b)
38 {
39     ans.clear();
40     int len;
41     ans.flag = 0;
42     len = a.len;
43     for(int i = 1;i <= len;i ++)
44     {
45         ans.num[i] += a.num[i] - b.num[i];
46         if(ans.num[i] < 0)
47         {
48             ans.num[i] += 10;
49             ans.num[i + 1] --;
50         }
51      }
52
53     while(!ans.num[len]) len--;
54     ans.len = len;
55
56     return ans;
57 }
58
59 bign get()
60 {
61     ans.clear();
62     string s;
63     cin>>s;
64     int len = s.length();
65     for(int i = 0;i <= len - 1;i ++)
66         ans.num[len - i] = s[i] - ‘0‘;
67     ans.len = len;
68     return ans;
69 }
70
71 void print(bign a)
72 {
73     for(int i = a.len;i >= 1;i --)
74         printf("%d",a.num[i]);
75     puts("");
76 }
77
78 int main()
79 {
80     bign a,b;
81     a = get();
82     b = get();
83     if(a == b)
84     {
85         printf("0\n");
86         return 0;
87     }
88     print(a - b);
89     return 0;
90 }

晚饭(dinner.c/.cpp)
题目描述
众所周知,东东是一个刚上幼儿园的小朋友,所以学习正确的使用餐具就很重要了,尤其判
断吃不同的东西用不同的餐具的时候。
晚饭时刻,东东爸拖着疲惫的身躯从厨房端出最后一道美味,这时桌子上已经摆了 n 道菜。
东东会按照东东爸的要求从第一道吃到最后一道菜,当然在开吃之前他会把筷子拿在手里。
对于第 i 道菜,如果使用勺子吃会花费时间 Ai,如果使用筷子吃会花费时间 Bi,如果吃这道
菜时需要交换勺子和筷子的话,则交换所耗费的时间 Ci。注意不能一道菜同时使用勺子和筷子。
这可为难了东东,你作为东东爸的亲学生,帮帮这可怜的孩儿吧。
输入格式
第一行是一个整数 n,表示有 n 道美味。
之后 n 行,每行三个整数 Ai,Bi,Ci。含义如题目描述。
输出格式
东东吃完所有菜所需要的最短时间。
样例输入
2
2 4 2
7 3 1
样例输出
6
数据范围与约定
对于 100% 的数据
1<=n<=10000 1<=Ai,Bi,Ci<=1000

分析:

赤果果的dp...应该是很好懂的。

AC代码:

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstring>
 5
 6 const int MAXN = 10005;
 7
 8 inline void read(int &x)
 9 {
10     char ch = getchar(),c = ch;x = 0;
11     while(ch < ‘0‘ || ch > ‘9‘) c = ch,ch = getchar();
12     while(ch <= ‘9‘ && ch >= ‘0‘) x = (x<<1)+(x<<3)+ch-‘0‘,ch = getchar();
13     if(c == ‘-‘) c = ch;
14 }
15
16 struct node
17 {
18     int a,b,c;
19 }m[MAXN];
20
21 int f[MAXN][5];
22 //f[i][j]表示吃完了第i道菜,当前的餐具为j(1勺子/2筷子)
23
24 int main()
25 {
26     int n;
27     read(n);
28     for(int i = 1;i <= n;++ i)
29     {
30         read(m[i].a),read(m[i].b),read(m[i].c);
31     }
32     f[0][2] = 0,f[0][1] = m[1].c;
33     for(int i = 1;i <= n;++ i)
34     {
35         f[i][1] = std::min(f[i-1][1]+m[i].a,f[i-1][2]+m[i].a+m[i].c);
36         f[i][2] = std::min(f[i-1][2]+m[i].b,f[i-1][1]+m[i].b+m[i].c);
37     }
38     printf("%d\n",std::min(f[n][1],f[n][2]));
39     return 0;
40 }

乐高山上的士兵(lego.c/.cpp)
问题描述:
东东喜欢玩乐高,尤其喜欢在乐高大板上摆各种各样的造型,
比如右侧图片中的就是一个回形迷宫。不过东东今天突发奇想,在
大板上摆了很多的乐高块,组成了一片连绵不绝的大山。然后就滔
滔不绝的给东东爸讲山里的故事,虽然臭东从来都没有去过山里。
看东东玩的这么嗨,东东爸也要寓教于乐,就问东东下面的问
题:如果每一个山顶都需要一个士兵来站岗,需要多少个士兵呢?
假设 lego 大板是 N(1<N<=100)行和 M(1<M<=100)列,每个点都有一个高度为 H
(0<=H<=10000)当然高度为 0 表示地面,不能称之为山顶。一个山顶是由一个或者多个连
续的点构成的,并且与山顶相连的点的高度都小于山顶的高度。如果两个点相连,则这两个点的
行的差都不超过 1,列的差也不超过 1。
 这可难不倒东东小盆友,因为整个山脉就是东东设计的,所以他很快就给出了答案,你也能
给出答案么?
输入格式
第一行:两个由空格隔开的正整数 N 和M。
接下来的N行,每行有M个由空格隔开的整数。第i行第j列的整数表示这个点(i,j)
的高度。
输出格式
一行一个整数,表示需要的士兵的数量。
样例输入
8 7
4 3 2 2 1 0 1
3 3 3 2 1 0 1
2 2 2 2 1 0 0
2 1 1 1 1 0 0
1 1 0 0 0 1 0
0 0 0 1 1 1 0
0 1 2 2 1 1 0
0 1 1 1 2 1 0
样例输出
3

分析:

赤果果的搜索...不过这个对我还是有点难度,毕竟几乎不会写暴力...

AC代码:

 1 #include<cstring>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cmath>
 5
 6 const int MAXN = 105;
 7
 8 inline void read(int &x)
 9 {
10     char ch = getchar(),c = ch;x = 0;
11     while(ch < ‘0‘ || ch > ‘9‘) c = ch,ch = getchar();
12     while(ch <= ‘9‘ && ch >= ‘0‘) x = (x<<1)+(x<<3)+ch-‘0‘,ch = getchar();
13     if(c == ‘-‘) x = -x;
14 }
15
16 int mp[MAXN][MAXN],m,n,ans;
17 bool use[MAXN][MAXN];
18
19 int dfs(int x,int y)
20 {
21     int v = 1;
22     if(x > n || y >m || x < 1 || y < 1)
23         return true;
24     use[x][y] = true;
25     for(int i = -1;i <= 1;++ i)
26         for(int j = -1;j <= 1;++ j)
27         {
28             if(i == 0 && j == 0) continue;
29             if(mp[x+i][y+j] > mp[x][y]) v = 0;
30             else if(mp[x+i][y+j] == mp[x][y] && !use[x+i][y+j]) v&=dfs(x+i,y+j);
31         }
32     return v;
33 }
34
35 int main()
36 {
37     read(n),read(m);
38     for(int i = 1;i <= n;++ i)
39         for(int j = 1;j <= m;++ j)
40             read(mp[i][j]);
41     for(int i = 1;i <= n;++ i)
42         for(int j = 1;j <= m;++ j)
43         {
44             if(mp[i][j] && !use[i][j] && dfs(i,j) == 1)
45                 ans ++;
46         }
47     printf("%d\n",ans);
48     return 0;
49 }
时间: 2024-08-27 16:52:43

NOIP模拟 8-21 题解的相关文章

noip模拟测试21

T1:折纸 这道写崩我也是没话说…… 模拟就完了,记录每次的折叠点,每次将之前的都扫一遍就完了 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<cmath> 5 #include<algorithm> 6 #include<cstdlib> 7 #define ll long long 8 using namespace std; 9 con

NOIP模拟17.9.21

NOIP模拟17.9.21 1 任务安排manage.in/.out/.cpp1.1 问题描述你有N 个工作,同一时刻只能做一个任务, 其中每个工作有其所需时间, 及完成的Deadline(截止时间), 问要完成所有工作, 最迟要从什么时候开始.你最早可以从时间0 开始工作.1.2 输入格式第一行一个整数N,表示任务数量接下来n 行,每行两个整数,Ti; Si,分别表示该任务的持续时间和截止时间.1.3 输出格式输出一个整数,表示最晚的开始时间,如果不能完成,输出-1.1.4 样例输入43 58

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

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

NOIP模拟17.8.17

NOIP模拟17.8.17 A 小 G 的字符串文件名 输入文件 输出文件 时间限制 空间限制str.pas/c/cpp str.in str.out 1s 128MB[题目描述]有一天,小 L 给小 G 出了这样一道题:生成一个长度为 n 的.全由小写英文字母构成的字符串,只能使用 k 种字母.要求满足:• 字符串中相邻的两个字母不能相同.• 必须出现恰好 k 种不同的字母.这样的合法字符串可能有很多,小 L 让小 G 输出字典序最小的那个.小 G 太笨啦,不会做这道题,希望你帮帮他.[输入格

NOIP模拟 17.8.18

NOIP模拟17.8.18 A.小菜一碟的背包[题目描述]Blice和阿强巴是好朋友但萌萌哒Blice不擅长数学,所以阿强巴给了她一些奶牛做练习阿强巴有 n头奶牛,每头奶牛每天可以产一定量的奶,同时也需要一定量的草作为饲料对于第 i头奶牛来说,它每天可以产 vi升的奶,同时需要 wi千克的草作为饲料现在来自蚯蚓国的九条可怜想借一些奶牛,使借走的这些奶牛每天的总产奶量最大,但九条可怜很穷,每天最多只能提供W千克的草作为饲料,而且她还需要对付跳蚤国的神刀手,所以她把这个问题交给了阿强巴,不不不……阿

NOIP 2014 提高组 题解

NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法,直接模拟,别读错题. 1 int wn[5][5]={{2,0,1,1,0}, 2 {1,2,0,1,0}, 3 {0,1,2,0,1}, 4 {0,0,1,2,1}, 5 {1,1,0,0,2}}; 6 7 int n,na,nb; 8 int a[222],b[222]; 9 int s1,s

NOIP模拟17.9.22

NOIP模拟17.9.22 前进![问题描述]数轴的原点上有一只青蛙.青蛙要跳到数轴上≥ ??的位置去,但很不幸数轴上有??个区间是禁区,不能进入.青蛙会选择一个长度??,从原点开始每次向右跳长度为??的一段.一路上青蛙会停的位置是0, ??, 2??,…直到跳到了≥ ??的位置,任意一个位置都不能在禁区中.请求出??的最小值,注意??可以是实数.[输入格式]输入文件为susume.in.输入文件的第一行包含两个整数??和??,含义如问题描述中所述.接下来??行,每行描述一个禁区.每行有两个整数

Noip 模拟练习6

Noip 模拟练习6 满分300,本人110.修正后260. 难度中等. 赌徒 Description 有 N 个赌徒,手里各自有自己的筹码.在赌博时,他们能向周围的赌徒借钱,所以他们 的筹码可能是负的,但筹码都一定是整数.当结束赌博时,N 个赌徒当中,筹码刚是另外 3 个 人筹码的总和的赌徒为胜者.如果有多个符合条件的赌徒,选择筹码最大的那个人为胜者. 例如 5 个赌徒,结束赌博时各有 2,3,5,7,12,则他们中的胜者是持有 12 的人,因为 12=2+3+7. Input 第一行为一个整

NOIP模拟 6.28

NOIP模拟赛6.28 Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空串. [输入格式]

NOIP模拟赛 6.29

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