程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 管閒事的小明(南陽oj51)(標記數組)

管閒事的小明(南陽oj51)(標記數組)

編輯:C++入門知識

管閒事的小明(南陽oj51)(標記數組)


管閒事的小明

時間限制:4000 ms | 內存限制:65535 KB 難度:2
描述
某校大門外長度為L的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1米。我們可以把馬路看成一個數軸,馬路的一端在數軸0的位置,另一端在L的位置;數軸上的每個整數點,即0,1,2,……,L,都種有一棵樹。
  由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。  已知任一區域的起始點和終止點的坐標都是整數,區域之間可能有重合的部分。現在要把這些區域中的樹(包括區域端點處的兩棵樹)移走。聰明的小明干了一件又一件事,他覺得這個很有意思,就想用計算機來幫助建築工人統計這些樹,現在任務來了,計算將這些樹都移走後,馬路上還有多少棵樹。
輸入
第一行是一個整數N表示有N組測試數據(1<=N<=100)
每組測試數據的第一行有兩個整數:L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表馬路的長度,M代表區域的數目,L和M之間用一個空格隔開。接下來的M行每行包含兩個不同的整數,用一個空格隔開,表示一個區域的起始點和終止點的坐標。


輸出
輸出包括一行,這一行只包含一個整數,表示馬路上剩余的樹的數目。

樣例輸入
1
500 3
150 300
100 200
470 471
樣例輸出
298
來源
經典
上傳者

hzyqazasdf

#include
#include
int a[10002];
int main()
{
	int test,i,m,n,ans,t,k;
	scanf("%d",&test);
	while(test--)
	{
		scanf("%d %d",&m,&n);
		memset(a,0,sizeof(a));
		while(n--)
		{
			scanf("%d%d",&t,&k);
			for(i=t;i<=k;i++)
			  a[i]=1;
		}
		for(i=0,ans=0;i<=m;i++)
		{
			if(!a[i])
			   ans++;
		    
		}
		printf("%d\n",ans);
	}
	return 0;
}
/*這種方法更常規,可以解決大數據問題,如果用標記果斷超時。 
這道題必須從i=0開始,ans=0,躺若賦值ans=data[0].j-data[0].k+1,
i=1開始循環,就一直WA。題目都說n>=1了,數據真弱,我也是醉了。。。 
*/
#include
#include
#include
using namespace std;
struct st
{
	int k;
	int j;
}data[10010];
int cmp(st a,st b)
{
	if(a.k!=b.k)
	   return a.kt)
			{
				ans+=data[i].j-data[i].k+1;
				t=data[i].j;
			}
			else
			if(data[i].j>t&&data[i].k<=t)
			{
				ans=ans+data[i].j-t;
				t=data[i].j;
			}
		}
		printf("%d\n",m-ans+1);
	}
	return 0;
}
						

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved