33 条题解
-
20
今天终于迎来了一道难题!来看看吧~
- 先定义布尔型数组 a,如果位置i有树,a[i]保存为true,否则保存为false
- a[0] ~ a[m]先设为有树,都设为 true
- 然后以此类推,把每一个有的都设为 true,这样就相当于是不是 true 就是 false,避免了重复的问题
思路就这么简单,来看看代码吧~(UP难得的做了注释……)
#include <bits/stdc++.h> using namespace std; int main() { bool a[10005];//如果位置i有树,a[i]保存为true,否则保存为false int l, m, start, end, s = 0;//s:树木数量统计 cin>>l>>m; for(int i = 0; i <= l; i++)//a[0]~a[l]先设为有树 a[i] = true; for(int i = 0; i < m; ++i)//m个区域 { cin >> start >> end;//输入每个区域的起始点和终止点 for(int j = start; j <= end; j++)//a[start]到a[end]设为无树 a[j] = false; } for(int i = 0; i <= l; ++i) { if (a[i]) s++;//或将这两行写为 s += a[i]; } cout<<s; return 0; }
-
8
很简单啦,请看解题!
#include <bits/stdc++.h> using namespace std; int main() { int n,q,l,r,a[10000],sum=0; cin >> n >> q; for (int i = 0; i <= n; i++) { a[i]=1; } for (int i = 1; i <= q; i++) { cin >> l >> r; for (int j = l; j <= r; j++) { a[j] = 0; } } for (int i = 0; i <= n; i++) { sum+=a[i]; } cout << sum; return 0; }//已AC,点个赞吧
-
3
#include <bits/stdc++.h> using namespace std; int main() { int a[10005],L,M,B,C,num=0;//B代表起始点,C代表终止点 cin>>L>>M; for(int i=0;i<=L;i++) { a[i]=1;//"1"代表树没有被移走 } for(int i=1;i<=M;i++) { cin>>B>>C; for(int i=B;i<=C;i++) { a[i]=0;//"0"代表树被移走 } } for(int i=0;i<=L;i++) { if(a[i]==1) { num++;//统计树的个数 } } cout<<num; } 已AC!
-
2
一道~~~~~~难题~~~~~~
#include <iostream> using namespace std; int main() { int num[10005]; int l, m; cin >> l >> m; for (int i = 0; i <= l; i++)//从零开始,一直到l { num[i] = 1;//将1设为有树 } int start, end;//定义起点和终点 for (int i = 0; i < m; i++) { cin >> start >> end;//输入起点和终点 for (int i = start; i <= end; i++) { num[i] = 0;//将0设为没树 } } int sum = 0; for (int i = 0; i <= l; i++) { sum += i; } cout << sum; return 0; }
-
2
#include<bits/stdc++.h> using namespace std; int l,m,x,y,a[100001],sum; int main() { cin >> l >> m; for(int i = 0;i <= l;i++) { a[i] = 1;//把路上的树设为1 } for(int i = 1;i <= m;i++) { cin >> x >> y; for(int i = x;i <= y;i++) { if(a[i] == 0) { continue;//避免重复扣除 } a[i]--; } } for(int i = 0;i <= l;i++) { sum += a[i];//求剩下的树的数量 } cout << sum; return 0; }
-
2
#include <iostream> using namespace std; int main() { int a[100005],s,e,l,m,sum; cin >> l >> m; for (int i = 0;i <= l;i ++) { a[i] = 1; } for (int i = 1;i <= m;i ++) { cin >> s >> e; for (int i = s;i <= e;i ++) { a[i] = 0; } } for (int i = 0;i <= l;i ++) { if (a[i] == 1) { sum ++; } } cout << sum; return 0; }
-
1
简单。 1.先初始化数组; 2.重复m次,每次把c数组a到b之间设为1,既没有树; 3.累加,有树就是1,否则是0,最后num就是树的棵数。 #include <iostream> using namespace std; int c[10000]; int main() { int l,m,num=0,a,b; cin>>l>>m; for (int i=0;i<=l;i++) { c[i]=1; } for (int i=1;i<=m;i++) { cin>>a>>b; for (int j=a;j<=b;j++) { c[j]=0; } } for (int i=0;i<=l;i++) { num+=c[i]; } cout<<num; return 0; }
-
1
挺简单的一道题
#include <bits/stdc++.h> using namespace std; int M[10005]; void sd/*shutdown*/(int start,int end){/*编写 熄灯函数*/ for (int i=start;i<=end;i++) M[i]=0; } int main(){ int sum=0,a,b; memset(M, 1/*初始化为1*/, sizeof(M)/*初始化长度*/);//初始化 int m,l; cin>>l>>m; for (int i=1;i<=m;i++){ cin>>a>>b; sd(a,b);//运用函数 } for (int i=0;i<=10004;i++){/*遍历,判断 个数*/ if (M[i]==0) sum++; } cout<<l/*总个数*/-sum+1; }
-
1
这道题还是挺简单的,主要考察的是for循环嵌套。 对于for循环的嵌套,有几点要求: 1、嵌套的原则:不允许交叉。 2、循环与分支可以相互嵌套但不允许交叉。 本题先将所有树设置为1,再循环输入去除的路段,将其设为0。最后for循环将所有数值累加进sum变量里,得到的数便是剩下的树了。 AC过,请放心食用。
#include <iostream> using namespace std; int main() { int l,m,a,b,n[10000],sum=0; cin >> l >> m; for(int i=0;i<=l;i++) { n[i]=1; } for(int i=0;i<m;i++) { cin >> a >> b; for(int i=a;i<=b;i++) { n[i]=0; } } for(int i=0;i<=l;i++) { sum+=n[i]; } cout << sum; return 0; }
-
1
这道题其实可以不去管那些重复部分,砍掉了再砍一次又不会长回来,对吧
#include <iostream> using namespace std; int main() { int a[9999],s,e,l,m,sum; cin >> l >> m;//输入范围 for (int i = 0;i <= l;i ++)//将区域范围的树初始化 { a[i] = 1; } for (int i = 1;i <= m;i ++) { cin >> s >> e; for (int i = s;i <= e;i ++)//砍掉指定范围内的树 { a[i] = 0; } } for (int i = 0;i <= l;i ++) { if (a[i] == 1)//为1代表有树 { sum ++; } } cout << sum; return 0; }
-
0
上成品
#include<bits/stdc++.h> using namespace std; int l,m,cnt; bool trees[10001]; int main(){ cin>>l>>m; memset(trees,true,sizeof(trees)); for(int i=0;i<=m;i++){ int u,v; cin>>u>>v; for(int j=u;j<=v;j++){ trees[j]=false; } }for(int i=0;i<=l;i++){ if(trees[i]) cnt++; }cout<<cnt; return 0; }
-
0
#include <iostream> using namespace std; int main() { int a[9999],s,e,l,m,sum; cin >> l >> m;//输入范围 for (int i = 0;i <= l;i ++)//将区域范围的树初始化 { a[i] = 1; } for (int i = 1;i <= m;i ++) { cin >> s >> e; for (int i = s;i <= e;i ++)//砍掉指定范围内的树 { a[i] = 0; } } for (int i = 0;i <= l;i ++) { if (a[i] == 1)//为1代表有树 { sum ++; } } cout << sum; return 0; }
-
0
#include <iostream> using namespace std; int main() { int a[9999],s,e,l,m,sum; cin >> l >> m; for (int i = 0;i <= l;i ++) { a[i] = 1; } for (int i = 1;i <= m;i ++) { cin >> s >> e; for (int i = s;i <= e;i ++) { a[i] = 0; } } for (int i = 0;i <= l;i ++) { if (a[i] == 1) { sum ++; } } cout << sum; return 0; }
-
0
#include <bits/stdc++.h> using namespace std; int main() { int l,a[10001],m,c,d; cin >> l >> m; for (int i = 0;i <= l;i++) { a[i] = 1; } for (int i = 1;i <= m;i++) { cin >> c >> d; for (int j = c;j <= d;j++) { a[j] = 0; } } int sum = 0; for (int i = 0;i <= l;i++) { if (a[i] == 1) { ++sum; } } cout << sum; return 0; } 这题就是定义一个带含义的数组,先是将数组全设为1,表示都有树,其次跟具范围将范围中的数组的数赋值为0,一番操作后,进行最后的0或1判断,如果状态为1,则将求和变量+1,反观,则跳过,最后输出sum;
-
0
使用数组存储树是否被砍(0表示未被砍,1表示被砍) 若树在范围内则砍去,设为1 最终统计数组中0的个数
#include <iostream> using namespace std; int main() { int l, m, x, y, cnt = 0, a[10001]; cin >> l >> m; // 初始时均为有树 for (int i = 0; i <= l; i++) { a[i] = 0; } //将在范围内的树砍去 for (int i = 1; i <= m; i++) { cin >> x >> y; for (int j = x; j <= y; j++) { a[j] = 1; } } // 统计未被砍的数目 for (int i = 0; i <= l; i++) { if (a[i] == 0) { cnt++; } } cout << cnt; return 0; }
-
0
当当! 新鲜出炉的题解来了!!! 先看下步骤:
- 先定义 数组 a ,如果位置i有树,a[i]保存为0,否则保存为 !=0.
- a[0] ~ a[l]先设为有树,都设为 0.
- 然后,把每一个要砍的树都 ++,这样就相当于是不是 0 就是 其他的,避免了重复的问题
- 最后, 输出所有==0 的 i.
来看代码吧
AC过,请放心食用
#include <iostream> using namespace std; int tree[10000], l, m, start, end, sum; int main() { cin >> l >> m; for (int i = 0; i < m; i++) { cin >> start >> end; for (start; start <= end; start++) { tree[start]++; } } for (int i = 0; i <= l; i++) { if (tree[i] == 0) { sum++; } } cout << sum; return 0; }
信息
- ID
- 1570
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 5
- 标签
- 递交数
- 2584
- 已通过
- 951
- 上传者