這道題需要用到
字首和的思想
首先假設船都靜止
由題設可得 y-z 到 x+z 可以看到船
然後(y-z)++ (x+z+1)–
這樣在某個位置,也就是一開始的狀態下,可以看到多少條船就
處理出來了
然後左右都線掃求和
左右線掃求到某個位置的最大值
然後再線掃求答案即可
因為相對運動,在某一時刻左右相對的船一定會相遇
問題 c: 拍照
時間限制: 1 sec 記憶體限制: 128 mb
提交: 54 解決: 35
[提交][狀態][討論版]
題目描述
小明在旅遊的路上看到了一條美麗的河,河上有許多船隻,有的船隻向左航行,有的船隻向右航行。小明希望拍下這一美麗的風景,並且把盡可能多的船隻都完整地拍到一張**中。
小明位於河的邊上,並且可以在河邊的任意位置進行拍照,照相機的視野恰好為90度角,只能以垂直於河邊的方向進行拍照。河上的船隻全都可看作是平行於河邊的一條線段,跟河邊的距離各不相同,有的正在向左移動,有的正在向右移動,但移動速度恰好都是一樣的。小明可以等待恰當的時間讓盡量多的船隻都走進照相機的視野裡,你不需要考慮船隻之間會互相遮擋視野的情況。
輸入 第一行為t,表示輸入資料組數。
下面t組資料,對於每組資料:
第一行是乙個數n,表示船隻的數量。
接下來n行,每行四個整數 x,y,z,d,表示船隻的左端點位置、右端點位置、距離河邊的距離,以及航行的方向。d為-1表示向左航行,1表示向右航行。
輸出 對第i組資料,輸出
case #i:
然後輸出一行,僅包含乙個整數,表示最多可以拍到多少完整的船隻。
樣例輸入
3 2
1 3 1 1
2 4 1 -1
2 1 3 1 -1
2 4 1 1
1 1 4 1 1
樣例輸出
case #1:
2 case #2:
1 case #3:
0 提示
1<=n<=10000 -10^6<=x
#include
#include
#include
#include
using
namespace
std;
int t,n;
int le[2000005],ri[2000005],suml[2000005];
int sumr[2000005],rmax[2000005],lmax[2000005];
int main()
int cnt=0,ans=0;
int ll=1000000000,rr=0;
scanf("%d",&n);
for (int i=1;i<=n;i++)
else
}}
suml[ll-1]=0;
sumr[rr+1]=0;
for (int i=ll;i<=rr;i++)
lmax[ll]=suml[ll];
rmax[rr]=sumr[rr];
for (int i=ll;i<=rr;i++)
for (int i=ll;i<=rr;i++)
if (lmax[i]+rmax[i]>ans) ans=lmax[i]+rmax[i];
printf("case #%d:\n%d\n",k,ans);
}return
0;}
2016暑期集訓集中貼
暑假期間網上練習的題解將在此部落格公布,具體內容見後文。以下是暑期集訓各隊員題量統計 包括賽後補的題 2016暑期集訓acboard 截至07 23 總題量557 5101010 1163 隊員名稱 cf 1 cf 2 cf 3 cf 4 cf 5 模擬訓練1 模擬訓練2 模擬訓練3 模擬訓練4 模...
ACM暑期集訓5
今天主要學習力圖論基礎和最短路徑 1.圖論基礎 1 鄰接矩陣存圖 w i j 表示以ij為頂點的邊的權值 const int n 105,inf 9999999 int dis n w n n vis n n,m 鄰接矩陣存圖 for int i 1 i n i for int i 0 i2 鄰接表...
2016暑期集訓 搜尋 簡單BFS
雖然,雖然,這道題很簡單。但是我一直覺得我自己關於搜尋可以算是一點都不會的,所以寫得時候也是有點沒底,可是,出乎意料的是我 寫完測了一下樣例是對的,交了之後發現過了,還是很開心的!看題,想題,敲 交題,ac!對,就是沒有debug這一步,這種一順溜,不用debug就過題的感覺真爽。第一次從搜尋的題目...