12 条题解
-
10
#include <iostream> #include <cmath> using namespace std; int a[10010]; int main() { int l,m; int sum = 0; cin >> l >> m; for (int i = 1; i <= m; i++) { int M855, M995; cin >> M855 >> M995; for (int j = M855; j <= M995; j++) { a[j] = 1; } } for (int i = 0; i <= l; i++) { if (a[i] == 0) { sum++; } } cout << sum; return 0; }
解析:
1.在主函数外开一个数组,这样数组内的元素就都是 0 了。我们把每棵树设为 0 和 1 两种状态。( 0 是没砍, 1 是砍了)
2.用 for 循环重复执行 m 次,获取砍树的两个端点。(M855,M995)
3.再用 for 循环 (M855 - M995)次,此时变量 j 每一次都是要砍的下一颗树的位置。我们可以把数组 a 的第 j 个元素(第 j 棵树)的状态设为 1 。
4.此时该砍的树已经砍完了,我们再在一个 for 循环里用 if 判断树砍没砍,(元素的是 0 还是 1)没砍( 0 )就将统计变量 sum 自增 1 。
5.输出。
6.球球了,点个赞吧👍 !!!(撕心裂肺)
-
3
嗨嗨嗨,我又双双来编题解了!!
老话,请勿借(
抄)鉴(袭)!!#include <iostream> using namespace std; int a[10005], sum=0; int main() { int n, m; cin >> n >> m; for (int i = 1; i <= m; i++) { //这段代码光抠屁砍树时给砍了...... cin >> l >> r; //这段代码光抠屁砍树时给砍了...... { a[j]=1; } } for (int i = 1; i <= n; i++) { //这段代码光抠屁砍树时给砍了...... { sum+=1; } } cout << sum+1; return 0; }
注意!!
1:光抠屁的砍树范围是1 ~ 10000,数组大小是[1 ~ 10001]。
2:注意for循环格式和数组输入法。
3:先种树(把数组的值都设为0),再让光抠屁砍树(把范围内的值设为1)。
4:看光抠屁没砍几棵树(判断是否为1,不为1总数加1)。
5:你懂的...... 👍 👍 👍 !!!!!
-
1
#include <iostream> #include <cmath> using namespace std; int flag[10005], l, m, sum; int main() { cin >> l >> m; for (int i = 1; i <= m; i++) { int x, y; cin >> x >> y; for (int j = x; j <= y; j++) { flag[j] = 1; } } for (int i = 0; i <= l; i++) { if (!flag[i]) { sum++; } } cout << sum; return 0; }
解: first:0指没有老邓砍到这树,1相反 second:每次为反拉规(flag)赋值为1,前提要有老邓输入的砍树区间[x, y] third:点赞!
-
1
题解思路:
创建一个数组表示树的状态:是否需要移走,元素个数为10005,然后把这个数组里面的所有数据全部初始化为0(不需要移走),表示每个一米点上都有一棵树。
循环输入M个起点和终点,遍历数组在这个范围内所有的值,设置为1(表示这个点有一棵树需要移走)
最后遍历整个数组,统计不需要移走的树(状态为0的树)的个数。😄 😄 🚀️ 🚀️ 😄😄
#include <iostream> using namespace std; int tree[10005]; //定义数组tree表示树的状态1表示移走,0表示不移走。默认为0。 int main() { int l,m,count=0; //定义路长,区域的数目和统计变量。 cin >> l >> m; for(int i = 1;i <= m;i++) //循环输入m组区域并作相应的处理。 { int s,e; //定义任意一个区域起点和终点并输入。 cin >> s >> e; for(int j = s;j <= e;j++) //循环起点到终点的树的状态为1。 tree[j] = 1; } for(int i = 0;i <= l;i++) //循环判断所有树的状态,不需要移走——状态为0累加。 if(tree[i] == 0) count += 1; cout << count; return 0; }
-
1
#include <iostream> //最低为0,最高500 using namespace std; int main() { int l[100000]; int l2, m, h = 0; cin >> l2 >> m; for (int i = 1; i <= m; i++) { int a, a2; cin >> a >> a2; for (int i = a; i <= a2; i++) l[i + 1] = 1; // 如果a读取到0,那么l中,l[0]=0 } for (int i = 1; i <= l2 + 1; i++) // 这个循环的键是0到l2,当int i=1;i<=l2+1时,是1到l2 { if (l[i] != 1) h += 1; } cout << h; return 0; }
-
1
还没学,但我先来把题解写了
思路:
创建一个数组,元素个数为10005,然后把这个数组里面的所有数据全部设为1,表示每个点上都有一棵树
接下来,获取一段地铁的起点和终点,遍历数组在这个范围内所有的值,如果值为1(这个点有一棵树)就将其设为0(表示砍掉),如果为0,不需要修改(毕竟题目没说要种回去)
最后遍历数组,求和,然后输出(此时数组里存储了每个点上是否有种树,因为x+0=x,所以不需要判断这个点上是不是有数,直接累加就行)
#include <iostream> using namespace std; int main() { int L,M; cin >> L >> M; int road[10005]; for(int i = 0;i <= L;i++) road[i] = 1; for(int i = 0;i < M;i++) { int start,end; cin >> start >> end; for(int j = start;j <= end;j++) { if (road[j] == 1) road[j] = 0; } } int sum = 0; for(int i = 0;i <= L;i++) sum += road[i]; cout << sum; return 0; }
-
1
解析
让flag[i]表示第i棵树有没有被砍了,0代表没有,1代表砍了。
- 对于每一次输入的砍树区间[x, y],都编写循环让flag[x~y]赋值为1。
- 统计flag[0~l]内有几个0即可。
易错点
在0号位置也有一棵树,不能忘记数。
题解
#include <iostream> #include <cmath> using namespace std; int flag[10005], l, m, sum; int main() { cin >> l >> m; for (int i = 1; i <= m; i++) { int x, y; cin >> x >> y; for (int j = x; j <= y; j++) { flag[j] = 1; } } for (int i = 0; i <= l; i++) { if (!flag[i]) { sum++; } } cout << sum; return 0; }
-
0
#include <bits/stdc++.h> using namespace std; int a[10010]; int main() { int l,m; int s = 0; cin >> l >> m; for (int i = 1; i <= m; i++) { int l2, m2; cin >> l2 >> m2; for (int j = l2; j <= m2; j++) { a[j] = 1; } } for (int i = 0; i <= l; i++) { if (a[i] == 0) { s++; } } cout << s; return 0; }
-
-1
#include<iostream> using namespace std; int a[10005]; int main() { int l,m; cin >> l >> m; for(int i=1;i<=m;i++) { int left,right; cin >> left >> right; for(int j=left;j<=right;j++) { a[j]=1; } } int num=0; for(int i=0;i<=l;i++) { if (a[i]==0) { num++; } } cout << num; return 0; }
-
-1
#include <iostream> using namespace std; int main() { int a[10001] , L , M , q , z , sum = 0; cin >> L >> M; for(int i = 0;i <= L;i++) { a[i] = 1; } for(int i = 1;i <= M;i++) { cin >> q >> z; for(int j = q;j <= z;j++) { a[j] = 0; } } for(int i = 0;i <= L;i++) { sum += a[i]; } cout << sum; return 0; }
-
-1
压缩流,十行解决👀️ 有兴趣加入吗🎉️(不要998 9998 99998) (只要亿元 1折够不够(不够) 10折 100折 1000折) 我们只要亿元,还打10000折 就只剩亿单了,赶紧点亮"良心"主播的小红星 主播折本,再给你们定第亿单🎉️ 🎉️ 🎉️
#include <iostream> int main(){ int l,m,sum=0,a[100001],x,y; std::cin>>l>>m; for(int i=1;i<=m;i++){ std::cin>>x>>y; for(int j=x;j<=y;j++) a[j]=1;} for(int i=0;i<=l;i++) if(a[i]==0) sum+=1; std::cout<<sum; return 0;}
-
-1
#include <iostream> using namespace std; int main() { int l,m,sum = 0; cin >> l >> m; int a[100001] = {0}; // 初始所有元素为0; for(int i = 1;i<=m;i++) { int qi,mo; cin >> qi >> mo; for(int j = qi ;j <= mo;j++) { a[j] = 1; // 若在地铁内将此索引内值为1; } } for(int i = 0;i<=l ;i++) { if(a[i] == 0) { sum += 1; // 遍历数组,符合条件数存在树就加1 } } cout << sum; return 0; }
- 1
信息
- ID
- 286
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 3254
- 已通过
- 645
- 上传者