327 条题解
-
11BC小陈 LV 5 @ 2018-04-18 20:43:19
#include<iostream> using namespace std; int main() { int l,m,i,s=0,j; cin>>l>>m; int a,b,c[l+1]={0};//搞数值和线段 for(i=1;i<=m;i++) { cin>>a>>b; for(j=a;j<=b;j++) c[j]=1;//如果是区域的就设置为1 } for(i=0;i<=l;i++) { if(c[i]==0) s++;//如果是0的话就加 } cout<<s;//最后输出 return 0; }
请各位大哥别默默的复制,有帮助就扣个1行不
-
12024-05-09 22:08:09@
这道题目可以用数组模拟马路来做
我们假设1代表被砍了,则0代表没砍
只需要开一个bool类型的数组就可以用上述假设完成这道题目
代码如下:#include<iostream> using namespace std; int L, m, l, r; bool a[10005]; // 记录有没有被砍掉 // 1.砍了,0.没砍 int main() { int ans = 0; cin >> L >> m; for (int i = 1; i <= m; i++) { cin >> l >> r; for (int j = l; j <= r; j++) a[j] = 1; } for (int i = 0; i <= L; i++) if (!a[i]) ans++; cout << ans; return 0; }
-
12023-08-08 12:57:15@
这种方法应该简单点!可以参考一下。
#include<bits/stdc++.h> using namespace std; int k[1000001]; int ans[1000001]; int main() { long long a,b,c,d,x=0; cin>>b>>a; for(int i=1;i<=a;i++) { cin>>c>>d; for(int j=c;j<=d;j++) { k[j]=1; } } for(int i=0;i<=b;i++) { if(k[i]==0)x++; } cout<<x; return 0; }
-
12023-07-18 10:39:44@
想了想,其实只用三遍循环就可以的。
思路:
第一遍,将路上的所有树打上标记,表示这个点没有被访问过。
第二遍,读入区间的头和尾,从这个区间的头开始循环,到尾结束,标记为访问过。
第三遍,顺序访问路上的树,只要没访问过,计数加1,这样就求出了路上所有还存在的树的数目。
程序如下:
#include<cstdio> #include<iostream> using namespace std; #include<cstring> //以上不解释 int L,M; //变量名称与原题相同 int cnt=0; //剩余树的数目 int vis[10000+10]; //用来判断树木有没有被访问过 int main() { memset(vis,0,sizeof(vis));//初始化该数组 cin>>L>>M;//标准输入,不解释 for(int i=0;i<=L;i++) vis[i]=0;//从0这个树开始,将这条路上所有的树标记为未访问过 for(int i=1;i<=M;i++) { int head,tail;//定义区间的头和尾 cin>>head>>tail; for(int j=head;j<=tail;j++) if(vis[j]==0) vis[j]=1;//从这个区间的头和尾开始,将所有区间内的树标记为访问过 } for(int i=0;i<=L;i++) { if(vis[i]==0) cnt++;//计算未被访问过的树的数目 } cout<<cnt<<endl; return 0; }
这么漂亮的题解,难道不点个赞再走嘛
-
02022-08-13 12:37:09@
啊这也不会有人做不出来吧
话不多说,代码飞来!#include<iostream> using namespace std; int main(){ int a[10010]; int i,j,m,L; int st,ed,cnt=0; cin>>L>>m; for(i=0;i<=L;i++){ a[i]=1; } for(i=0;i<=m;i++){ cin>>st>>ed; for(j=st;j<=ed;j++){ a[j]=0; } } for(i=0;i<=L;i++){ if(a[i]==1){ cnt++; } } cout<<cnt; return 0; }
-
02021-08-12 09:03:51@
Python 解法
思路
这道题直接模拟,用一个列表表示数轴上的树,然后根据输入的两个数将这个区间的数打上标记,最后统计没有打标记的元素即可。
\(Code\)
l,m=input().split() l=int(l) m=int(m) lis=[] for i in range(0,l+1): lis.append(True) #初始化 for i in range(1,m+1): a,b=input().split() a=int(a) b=int(b) for j in range(a,b+1): lis[j]=False #模拟打标记 ans=0 for i in range(0,l+1): if lis[i]: ans+=1 print(ans,'\n')
-
02018-08-18 14:03:18@
线段树什么的都是不存在的。。。
数据范围很小,暴力AC。。。#include<iostream> using namespace std; bool a[10001]; int main() { int n,m; cin>>n>>m; for(int i=0;i<=n;i++) { a[i]=1; } n++; for(int i=1;i<=m;i++) { int x,y; cin>>x>>y; for(int j=x;j<=y;j++) { n-=a[j]; a[j]=0; } } cout<<n; return 0; }
-
02018-08-08 13:48:09@
我来给Pascal党发题解,还是一句话,我是托儿索!
var
f:array[0..10000] of boolean;
l,m,i,t,x,y,j:longint;
begin
fillchar(f,sizeof(f),true);
t:=0;
read(l,m);
for i:=1 to m do
begin
read(x,y);
for j:=x to y do
f[j]:=false;
end;
for i:=0 to l do
if f[i] then inc(t);
write(t);
end. -
02018-07-22 12:50:20@
C++标程:
#include <iostream>
#define N 100010
using namespace std;
int l[N];//数组l代表马路的长度,标记为0
int x,y;//区域的起始点和终止点
int main()
{
int L,M;//变量L代表马路的长度,变量M代表区域的数目
cin>>L>>M;
for (int i=1;i<=M;i++)
{
cin>>x>>y;
for (int j=x;j<=y;j++)//“挖地铁”
l[j]=1;
}
int count=0;
for (int i=0;i<=L;i++)//统计树的个数
if (l[i]==0) count++;
cout<<count<<endl;
return 0;
} -
02018-07-19 16:57:17@
#include<iostream>
using namespace std;
int main()
{
int s, e;
int subn,tree;
bool road[10001];
for(int i=0;i<=10000;i++) road[i]=0;
cin>>tree>>subn;
for(int i=0;i<subn;i++)
{
cin>>s>>e;
for(int j=s;j<=e;j++)
if(!road[j])
{
road[j]=1;
tree--;
}
}cout<<tree+1;
return 0;
} -
02018-07-19 16:57:09@
#include<iostream>
using namespace std;
int main()
{
int s, e;
int subn,tree;
bool road[10001];
for(int i=0;i<=10000;i++) road[i]=0;
cin>>tree>>subn;
for(int i=0;i<subn;i++)
{
cin>>s>>e;
for(int j=s;j<=e;j++)
if(!road[j])
{
road[j]=1;
tree--;
}
}cout<<tree+1;
return 0;
} -
02018-07-19 16:56:48@
#include<iostream>
using namespace std;
int main()
{
int s, e;
int subn,tree;
bool road[10001];
for(int i=0;i<=10000;i++) road[i]=0;
cin>>tree>>subn;
for(int i=0;i<subn;i++)
{
cin>>s>>e;
for(int j=s;j<=e;j++)
if(!road[j])
{
road[j]=1;
tree--;
}
}cout<<tree+1;
return 0;
} -
02018-07-15 09:36:50@
#include<iostream>
#include<cstdio>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int l ,m,i,j,e,c,d,s=0;
int a[10001],b[10001];
cin>>l>>m;
for( i=0;i<=l;++i)a[i]=1;
for(j=1;j<=m;++j)
{
cin>>e>>c;
for(d=e;d<=c;++d)
a[d]=0;
}
for(i=0;i<=l;++i)
if(a[i])
{
s=s+a[i];
}cout<<s<<endl;
return 0;
} -
02018-07-09 15:17:40@
#include<stdio.h>
#include<string.h>
int main()
{
int road[100001];
memset(road, 0, sizeof(road));
int M,length_road;
int m_start, m_end;
scanf("%d%d", &length_road, &M);
int i, j, k,count=0;
for (i = 0; i <= length_road; i++)
{
road[i] = 1;
}
for (j = 1; j <= M; j++)
{
scanf("%d%d", &m_start, &m_end);
for (k = m_start; k<=m_end; k++)
{
road[k] = 0;
}
}
for (int t = 0; t <= length_road; t++)
{
if (road[t] == 0)
{
//printf("%d ",t);
count++;
}
}
//printf("\n%d\n",count);
printf("%d\n", length_road-count+1);
return 0;
} -
02018-06-16 17:25:05@
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int *a = new int[n+1];
for (int i = 0; i < n+1; i++)
a[i] = 1;
int begin, end;
int q;
cin >> q;
while (q--)
{
cin >> begin >> end;
if (begin > end)
swap(begin, end);
for (int i = begin; i <= end; i++)
a[i] = 0;
}
int sum = 0;
for (int i = 0; i < n+1; i++)
sum += a[i];
cout << sum;
return 0;
} -
02018-06-16 17:24:56@
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int *a = new int[n+1];
for (int i = 0; i < n+1; i++)
a[i] = 1;
int begin, end;
int q;
cin >> q;
while (q--)
{
cin >> begin >> end;
if (begin > end)
swap(begin, end);
for (int i = begin; i <= end; i++)
a[i] = 0;
}
int sum = 0;
for (int i = 0; i < n+1; i++)
sum += a[i];
cout << sum;
return 0;
} -
02018-06-16 17:24:19@
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int *a = new int[n+1];
for (int i = 0; i < n+1; i++)
a[i] = 1;
int begin, end;
int q;
cin >> q;
while (q--)
{
cin >> begin >> end;
if (begin > end)
swap(begin, end);
for (int i = begin; i <= end; i++)
a[i] = 0;
}
int sum = 0;
for (int i = 0; i < n+1; i++)
sum += a[i];
cout << sum;
return 0;
} -
02018-04-19 20:46:47@
#include<iostream>
using namespace std;
int main()
{
int l,m,i,s=0,j;
cin>>l>>m;
int a,b,c[l+1]={0};
for(i=1;i<=m;i++)
{
cin>>a>>b;
for(j=a;j<=b;j++) c[j]=1;
}
for(i=0;i<=l;i++)
{
if(c[i]==0) s++;
}
cout<<s;return 0;
} -
02018-03-21 23:13:48@
#include<iostream> using namespace std; int main() { int n; cin >> n; int *a = new int[n+1]; for (int i = 0; i < n+1; i++) a[i] = 1; int begin, end; int q; cin >> q; while (q--) { cin >> begin >> end; if (begin > end) swap(begin, end); for (int i = begin; i <= end; i++) a[i] = 0; } int sum = 0; for (int i = 0; i < n+1; i++) sum += a[i]; cout << sum; return 0; }
-
02018-02-14 18:38:16@
#include <stdio.h>//非常暴力
struct road
{
int sta;
int end;
}ar[100];
int main()
{
int L, M;
int time = 0;
int roa[10002] = { 0 };
scanf("%d %d", &L, &M);
for (int i = 0; i < M; i++)
{
scanf("%d %d", &ar[i].sta, &ar[i].end);
for (int j = ar[i].sta; j <= ar[i].end; j++)
roa[j] = 1;
}
for (int i = 0; i <= L; i++)
{
if (roa[i] == 0)
time++;
}
printf("%d", time);return 0;
}