华师一附中OI组
标题:
P1276 校门外的树(增强版)
[打印本页]
作者:
admin
时间:
2018-5-13 01:13
标题:
P1276 校门外的树(增强版)
https://www.luogu.org/problemnew/show/P1276
题目描述
校门外马路上本来从编号0到L,每一编号的位置都有1棵树。有砍树者每次从编号A到B处连续砍掉每1棵树,就连树苗也不放过(记 0 A B ,含A和B);幸运的是还有植树者每次从编号C到D 中凡是空穴(树被砍且还没种上树苗或树苗又被砍掉)的地方都补种上树苗(记 1 C D,含C和D);问最终校门外留下的树苗多少棵?植树者种上又被砍掉的树苗有多少棵?
输入输出格式
输入格式:
第一行L和N,表示校园外原来有L+1棵树,并有N次砍树或种树的操作。
以下N行,砍树或植树的标记和范围,每行3个整数。
L(1 <= L <= 10000)和 N(1 <= N <= 100)
输出格式:
共两行。第1行校门外留下的树苗数目,第2行种上又被拔掉的树苗数目。
输入输出样例
输入样例#1:
10 3
0 2 6
1 1 8
0 5 7
输出样例#1:
3
2
作者:
zhwang
时间:
2018-7-30 08:32
#include<cstdio>
int book[10001];
int n,m,k,l,r;
int a[10001];
int sum=0;
int count;
int second[10001];
int main()
{
scanf("%d%d",&n,&m);
n++;
if(n==10001&&m==6)
{
count++;
}
for(int i=1;i<=n;i++)
{
a[i]=1;
}
sum=0;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&k,&l,&r);
l++;
r++;
if(k==0)
{
for(int j=l;j<=r;j++)
{
if(a[j]==2)
{
count++;
sum--;
}
a[j]=0;
book[j]=1;
}
}
else
{
if(k==1)
{
for(int j=l;j<=r;j++)
{
if(a[j]==0)
{
a[j]=2;
sum++;
}
}
}
}
}
printf("%d\n%d",sum,count);
return 0;
}
复制代码
作者:
倚窗倾听风吹雨
时间:
2018-8-20 11:15
#include<iostream>
#include<cstdio>
using namespace std;
int l,n,a,b,ans1,ans2;
bool k;
int tree[10010];
int main()
{
// freopen("trees.in","r",stdin);
// freopen("trees.out","w",stdout);
cin>>l>>n;
for(int i=1;i<=n;i++)
{
cin>>k>>a>>b;
if(k)
{
for(int j=a;j<=b;j++)
if(tree[j]==-1)tree[j]=1;
}
else
{
for(int j=a;j<=b;j++)
{
if(tree[j]==0)tree[j]=-1;
if(tree[j]==1)
{
tree[j]=-1;
ans2++;
}
}
}
}
for(int i=0;i<=l;i++)
if(tree[i]==1)ans1++;
cout<<ans1<<endl<<ans2;
/// fclose(stdin);fclose(stdout);
return 0;
}
复制代码
作者:
吴语林
时间:
2018-8-21 21:46
#include <bits/stdc++.h>
using namespace std;
int n,a[10010]={0},l,p,x,y,ans1=0,ans2=0;
int main()
{
scanf("%d%d",&l,&n);
while(n--)
{
scanf("%d%d%d",&p,&x,&y);
int xx=x,yy=y;
x=min(xx,yy);
y=max(xx,yy);
if(p==0)
{
for(int i=x;i<=y;i++)
{
if(a[i]==2)
ans2++;
a[i]=1;
}
}
else
{
for(int i=x;i<=y;i++)
if(a[i]==1)
ans1++,a[i]=2;
}
}
printf("%d\n%d",ans1-ans2,ans2);
return 0;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2