327 条题解
-
0谷蓁 LV 6 @ 2018-01-28 11:33:37
//c++
#include<iostream>
using namespace std;
int main(){
int a,b,j,l,i,m,t=0;
cin>>l>>m;
int c[l+30];
for(i=0;i<=l;i++) c[i]=1;
for(i=0;i<m;i++){
cin>>a>>b;
for(j=a;j<=b;j++) c[j]=0;
}
for(i=0;i<=l;i++) if(c[i]) t++;
cout<<t;
} -
02018-01-24 21:04:01@
#include <stdio.h>
const int N=10005;
int a[N];
int main()
{
int i,j,k,l,m,n,sum=0;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&k,&l);
for(j=k;j<=l;j++)
a[j]++;
}
for(i=0;i<=n;i++)
if(a[i]==0)sum++;
printf("%d",sum);
} -
02018-01-19 20:48:49@
-
02017-12-03 14:32:46@
用数组必须容量大才行。。。
#include<stdio.h>
int main()
{
int a[100000],n,m,b1,b2,sum=0;
scanf("%d%d",&n,&m);
for(int i=0;i<=n;i++)
{
a[i]=1;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&b1,&b2);
for(int j=b1;j<=b2;j++)
{
a[j]=0;
}
}
for(int i=0;i<=n;i++)
{
if(a[i]!=0)sum++;
}
printf("%d",sum);
return 0;
} -
02017-10-29 22:32:31@
#include<iostream>
using namespace std;
int a[10001];
int main()
{
int i,j,l,m,c,x,y;
c=0;
cin>>l>>m;
for(i=1;i<=m;i++)
{
cin>>x>>y;
for(j=x;j<=y;j++)
{
a[j]=1;
}
}
for(i=0;i<=l;i++)
{
if(a[i]==0)
{
c++;
}
}
cout<<c<<endl;
system ("pause");
return 0;
} -
02017-10-10 21:54:00@
#include<iostream>
using namespace std;
int a[10001];
int main()
{
int sum=0,m,x,y,l,i,j,k;
cin>>l>>m;
for(i=0;i<m;i++)
{
cin>>x>>y;
for(j=x;j<=y;j++)
a[j]=1;
}
for(k=0;k<=l;k++)
{
if(a[k]!=1)
sum++;
}
cout<<sum;
} -
02017-10-01 09:08:33@
#include<iostream>
using namespace std;
int a[110],b[110],c[10010];
int main()
{
int L,M,sum=0;
cin>>L>>M;
for(int i=0;i<M;i++)
{
cin>>a[i]>>b[i];
for(int j=a[i];j<=b[i];j++)
{
c[j]=1;
}
}
for(int i=0;i<=L;i++)
{
if(c[i]!=1)
sum++;
}
cout<<sum<<endl;
return 0;
} -
02017-09-18 10:23:47@
线段树。。。。。。
#include<cstdio> #include<iostream> using namespace std; struct node{ int right,left,sum,lazy; }tree[10008*4]; int n,m; void build(int now,int le,int ri){ tree[now].left=le;tree[now].right=ri; if(le==ri){tree[now].sum=1;return;} int mid=(ri+le)>>1; build(now*2,le,mid); build(now*2+1,mid+1,ri); tree[now].sum=tree[now*2].sum+tree[now*2+1].sum; return; } void pushdown(int now){ tree[now*2].sum=tree[now*2+1].sum=0; tree[now*2].lazy=tree[now*2+1].lazy=1; tree[now].lazy=0;return; } void update(int now,int le,int ri){ if(tree[now].left==le&&tree[now].right==ri){ tree[now].sum=0; tree[now].lazy=1; return; } if(tree[now].lazy)pushdown(now); int mid=(tree[now].left+tree[now].right)>>1; if(mid>=ri) update(now*2,le,ri); else if(mid<le) update(now*2+1,le,ri); else {update(now*2,le,mid);update(now*2+1,mid+1,ri);} tree[now].sum=tree[now*2].sum+tree[now*2+1].sum; return; } int search(int now){ return tree[now].sum; } int main(){ cin>>n>>m; build(1,0,n); for(int i=1;i<=m;i++){ int a,b; cin>>a>>b; update(1,a,b); } cout<<search(1); return 0; }
-
02017-08-17 21:52:58@
#include <stdio.h>
int main()
{
int l,m,a,b,sum=0,i,j;
int L[10001]={0};
scanf("%d %d",&l,&m);for(i=1;i<=m;i++)
{
scanf("%d %d",&a,&b);
for(j=a;j<=b;j++)
L[j]=1;
}for(i=0;i<=l+1;i++)
if(L[i]==1)
sum++;printf("%d",l+1-sum);
return 0;
} -
02017-08-10 22:05:57@
var l,m,x,y,i,j,ans:longint; a:array[0..10000] of integer;
begin
readln(l,m);
fillchar(a,sizeof(a),1);
for i:=1 to m do
begin
readln(x,y);
for j:=x to y do a[j]:=0;
end;
for i:=0 to l do
if a[i]<>0 then inc(ans);
writeln(ans);
end. -
02017-08-07 16:17:20@
我觉得这个应该属于哈希表的一种吧
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<algorithm> #include<vector> using namespace std; int main(void){ freopen("2.in","r",stdin); freopen("2.out","w",stdout); int l; cin>>l; vector<int> w(l+1,1); int m; cin>>m; for (int i=0;i<m;i++){ int a,b; cin>>a; cin>>b; for (int j=a;j<=b;j++){ w[j]=0; } } int s=0; for (int i=0;i<l+1;i++){ if (w[i]==1) s=s+1; } cout<<s; return 0; }
-
02017-08-06 12:40:23@
#include<stdio.h>
int main()
{
int tree[10003],piece[103][2],i,l,m,a,num=0;
scanf("%d%d",&l,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&piece[i][0],&piece[i][1]);
}
for(i=0;i<=l;i++)
{
tree[i]=1;
}
for(i=1;i<=m;i++)
{
for(a=piece[i][0];a<=piece[i][1];a++)
{
if(tree[a]==1)
{
tree[a]=0;
num++;
}
}
}
printf("%d",l-num+1);
} -
02017-07-20 04:17:36@
#include <iostream>
using namespace std;
int main(){
int M,N;
cin>>M>>N;
int tree[M+1];
for(int i=0;i<M+1;i++){
tree[i]=1;
}
int start,end;
while(N--){
cin>>start>>end;
for(int i=start;i<=end;i++){
tree[i]=0;
}
}
int count=0;
for(int i=0;i<M+1;i++){
if(tree[i]==1)count++;
}
cout<<count<<endl;
} -
02017-07-14 11:27:19@
vector<bool>
#include <iostream> #include <vector> int main() { std::vector<bool> tree; int l; std::cin >> l; ++l; tree.assign(l, true); int m, sum = l; std::cin >> m; for (int i = 0; i < m; ++i) { int min, max; std::cin >> min >> max; for (int j = min; j <= max; ++j) { if (tree[j]) { tree[j] = false; --sum; } } } std::cout << sum << std::endl; }
-
02017-06-05 20:43:46@
//经典桶排序
#include <stdio.h>
int aa[10010]={0};
int main()
{
int m,n,i,j,a,b,ans=0;
scanf("%d%d",&m,&n);
for(i=0;i<=m;i++)
aa[i]=1;
for(i=0;i<n;i++)
{
scanf("%d%d",&a,&b);
for(j=a;j<=b;j++)
{
aa[j]=0;
}
}
for(i=0;i<=m;i++)
{
if(aa[i]==1)
ans++;
}
printf("%d",ans);
return 0;}
-
02017-05-08 07:55:48@
#include <cstring> #include <cstdio> #include <algorithm> #include <iostream> using namespace std; #define maxn 500000+10 int fa[maxn]; int n, q; int ans ; int solve(int a,int b) { int i=b; for(int i = b ; i >= a ; )//从右向左扫描 { if( fa[i] == i ) { ans--; fa[i] = a - 1;//标记,同时用fa[i]来方便下次快速转换位置 //即直接免去查找此区间,跳到区间的一个左端点 i--; } else//已经扫过 i = fa[i];//直接跳到左区间端点向右一个位置(因为已经扫过) } } int main( ) { scanf("%d %d",&n,&q); for(int i = 0 ; i <= n ; ++i) fa[i] = i; ans = n+1; for(int i = 1 ; i <= q ; i++) { int a, b; scanf("%d %d",&a,&b); if( a > b ) swap( b, a ); solve( a, b ); } printf("%d\n",ans); }
-
02017-03-30 17:26:50@
考虑重叠部分,一直不行,换了一种方法
#include<iostream> using std::cin; using std::cout; using std::endl; int main() { int L, M; cin >> L >> M; int amount = 0; int** a = new int*[M]; int* b = new int[L+1]; for (int i = 0; i < M; i++) { a[i] = new int[2]; cin >> a[i][0] >> a[i][1]; for (int j = a[i][0]; j <= a[i][1]; j++) b[j] = 1; } for (int i = 0; i < L + 1; i++) if (b[i] != 1) amount++; cout << amount; for (int i = 0; i < M; i++) delete []a[i]; delete[]a; delete[]b; return 0; }
-
02017-03-10 20:15:06@
#include<iostream>
using namespace std;
int main()
{
int i,j,n;//循环变量2个,个数,
int js=0;//树的计数
int b,e;//begin,end
int a[10002]={0};
cin>>n;
for(i=0;i<=n;i++)
a[i]=1;//有树的是1,没有是0
int dt;//地铁
cin>>dt;
for(i=1;i<=dt;i++)
{
cin>>b>>e;
for(j=b;j<=e;j++)
a[j]=0;
}
/*for(i=0;i<=n;i++)
cout<<i<<" "<<a[i]<<" ";
cout<<endl;*/
for(i=0;i<=n;i++)
if(a[i]==1)
js++;
cout<<js;
return 0;
} -
02017-01-31 23:51:29@
code
include <cstdio>
using namespace std;
int main()
{
int l=0,m=0;
int begin=0,end=0;
char tree[10005]={0};
int num=0;
scanf("%d%d",&l,&m);
for(int i=0;i<=l;i++)
{
tree[i]='1';
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&begin,&end);
for(int j=begin;j<=end;j++)
{
tree[j]='0';
}
begin=0;
end=0;
}
for(int i=0;i<=l;i++)
{
if(tree[i]=='1')
{
num++;
}
}
printf("%d",num);
return 0;
} -
02016-12-18 19:56:28@
我操。。。。。。我能说我原先还一直在判断是否重复区间吗?然后过了30%数据,然后百思不得其解,看到大神做法。。。直接数组标记下就好了,还管什么重复区间,,,然后Ac了