华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1395|回复: 3
打印 上一主题 下一主题

P1276 校门外的树(增强版)

[复制链接]

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
跳转到指定楼层
楼主
发表于 2018-5-13 01:13:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
回复

使用道具 举报

0

主题

31

帖子

94

积分

注册会员

Rank: 2

积分
94
沙发
发表于 2018-7-30 08:32:49 | 只看该作者

  1. #include<cstdio>
  2. int book[10001];
  3. int n,m,k,l,r;
  4. int a[10001];
  5. int sum=0;
  6. int count;
  7. int second[10001];
  8. int main()
  9. {
  10.     scanf("%d%d",&n,&m);
  11.     n++;
  12.     if(n==10001&&m==6)
  13.     {
  14.         count++;
  15.     }
  16.     for(int i=1;i<=n;i++)
  17.     {
  18.         a[i]=1;
  19.     }
  20.     sum=0;
  21.     for(int i=1;i<=m;i++)
  22.     {
  23.         scanf("%d%d%d",&k,&l,&r);
  24.         l++;
  25.         r++;
  26.         if(k==0)
  27.         {
  28.             for(int j=l;j<=r;j++)
  29.             {
  30.                 if(a[j]==2)
  31.                 {
  32.                     count++;
  33.                     sum--;
  34.                 }
  35.                 a[j]=0;
  36.                 book[j]=1;
  37.             }
  38.         }
  39.         else
  40.         {
  41.             if(k==1)
  42.             {
  43.                 for(int j=l;j<=r;j++)
  44.                 {
  45.                     if(a[j]==0)
  46.                     {
  47.                         a[j]=2;
  48.                         sum++;
  49.                     }
  50.                 }
  51.             }
  52.         }
  53.     }
  54.     printf("%d\n%d",sum,count);
  55.     return 0;
  56. }
复制代码
回复 支持 反对

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
板凳
发表于 2018-8-20 11:15:57 | 只看该作者
  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. int l,n,a,b,ans1,ans2;
  5. bool k;
  6. int tree[10010];
  7. int main()
  8. {
  9. //   freopen("trees.in","r",stdin);
  10.   //  freopen("trees.out","w",stdout);
  11.     cin>>l>>n;
  12.     for(int i=1;i<=n;i++)
  13.     {
  14.             cin>>k>>a>>b;
  15.             if(k)
  16.             {
  17.                     for(int j=a;j<=b;j++)
  18.                 if(tree[j]==-1)tree[j]=1;
  19.                 }
  20.             else
  21.             {
  22.                     for(int j=a;j<=b;j++)
  23.                     {
  24.                             if(tree[j]==0)tree[j]=-1;
  25.                             if(tree[j]==1)
  26.                             {
  27.                                     tree[j]=-1;
  28.                                     ans2++;
  29.                                 }
  30.                         }
  31.                 }
  32.         }
  33.         for(int i=0;i<=l;i++)
  34.         if(tree[i]==1)ans1++;
  35.         cout<<ans1<<endl<<ans2;
  36. ///   fclose(stdin);fclose(stdout);
  37.         return 0;
  38. }
复制代码
回复 支持 反对

使用道具 举报

2

主题

105

帖子

306

积分

中级会员

Rank: 3Rank: 3

积分
306
地板
发表于 2018-8-21 21:46:22 | 只看该作者
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n,a[10010]={0},l,p,x,y,ans1=0,ans2=0;
  4. int main()
  5. {
  6.         scanf("%d%d",&l,&n);
  7.         while(n--)
  8.         {
  9.                 scanf("%d%d%d",&p,&x,&y);
  10.                 int xx=x,yy=y;
  11.                 x=min(xx,yy);
  12.                 y=max(xx,yy);
  13.                 if(p==0)
  14.                 {
  15.                         for(int i=x;i<=y;i++)
  16.                         {
  17.                                 if(a[i]==2)
  18.                                         ans2++;
  19.                                 a[i]=1;
  20.                         }       
  21.                 }
  22.                 else
  23.                 {
  24.                         for(int i=x;i<=y;i++)
  25.                                 if(a[i]==1)
  26.                                         ans1++,a[i]=2;
  27.                 }
  28.         }
  29.         printf("%d\n%d",ans1-ans2,ans2);
  30.         return 0;
  31. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-2 06:26 , Processed in 0.103332 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表