日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LA4851餐厅(求好的坐标的个数)

發布時間:2025/6/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LA4851餐厅(求好的坐标的个数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:

? ? ? 有一個m*m的格子,左下角(0,0)右上角(m-1,m-1),網格里面有兩個y坐標相同的賓館(A,B),每個賓館里面有一個餐廳,一共用n個餐廳,第1,2個都在賓館里,3,4...在其他位置,你現在要在空余坐標上建立一個自己的餐廳,餐廳必須建立在最有利的位置上,什么樣的位置算是有利的位置?如果你要在C這二個點建立一個餐廳,假如你要比D這個餐廳的位置有利那么你到A賓館里里面的餐廳1的距離比C到這個賓館的近,或者是到B的也行,只要有一個比C的近,那么你的位置就比C好,如果當前點想建立餐廳,那么必須必所有的餐廳的位置都好才行,問一共多有多少個好的位置。




思路:
? ? ? ?吭了好幾個小時了,終于想出來了,對于每一個已經有的餐館(包括第一個和第二個),他們會限制兩個區域,分別是這兩個區域(用右上方這個點舉例):
每個點都有這樣類此的以AB連線對稱的兩個限制區域,我們把所有區域疊加起來,最后剩下的就是可行的區域,疊加的時候也很簡單,我們枚舉x1--x2的所有x,Yu[x]表示x節點在AB連線上方的最小限制值,Yd[x]是下方的最大限制值,Y[x] = minn(Yu[x] - y ,Yd[x] - y),表示的是在x這個點的這一豎列的最大非限制距離,然后就是簡單更新,具體細節看下面代碼。




#include<stdio.h>


#define N 66000
#define INF 100000000


int maxx(int x ,int y)
{
? ?return x > y ? x : y;
}


int minn(int x ,int y)
{
? ?return x < y ? x : y;
}


int Yu[N] ,Yd[N] ,Y[N];


int main ()
{
? ?int t ,n ,m ,i ,x ,y ,x1 ,x2 ,y1 ,y2;
? ?scanf("%d" ,&t);
? ?while(t--)
? ?{
? ? ? scanf("%d %d" ,&m ,&n);
? ? ? scanf("%d %d" ,&x1 ,&y1);
? ? ? scanf("%d %d" ,&x2 ,&y2);
? ? ? if(x1 > x2) x = x1 ,x1 = x2 ,x2 = x;
? ? ? for(i = x1 ;i <= x2 ;i ++)
? ? ? Yd[i] = -INF ,Yu[i] = INF;
? ? ? for(i = 3 ;i <= n ;i ++)
? ? ? {
? ? ? ? ?scanf("%d %d" ,&x ,&y);
? ? ? ? ?if(y >= y1) Yu[x] = minn(Yu[x] ,y);
? ? ? ? ?if(y <= y1) Yd[x] = maxx(Yd[x] ,y);
? ? ? }
? ? ? Y[x1] = Y[x2] = 0;
? ? ? for(i = x1 + 1 ;i < x2 ;i ++)
? ? ? Y[i] = minn(Yu[i] - y1 ,y1 - Yd[i]);
? ? ??
? ? ? for(i = x1 + 1 ;i < x2 ;i ++)
? ? ? Y[i] = minn(Y[i-1] + 1 ,Y[i]);
? ? ??
? ? ? for(i = x2 - 1 ;i > x1 ;i --)
? ? ? Y[i] = minn(Y[i+1] + 1 ?,Y[i]);
? ? ??
? ? ? long long Ans = 0;
? ? ? for(i = x1 + 1 ;i < x2 ;i ++)
? ? ? {
? ? ? ? ?if(Y[i])
? ? ? ? ?{
? ? ? ? ? ? Ans ++;
? ? ? ? ? ? Ans += (long long)minn(m - 1 - y1 ,Y[i] - 1);//防止出現INF
? ? ? ? ? ? Ans += (long long)minn(Y[i] - 1,y1);//防止出現INF
? ? ? ? ?}
? ? ? }
? ? ? printf("%lld\n" ,Ans);
? ?}
? ?return 0;
}
? ? ??
? ? ??
? ? ??
? ? ??
? ? ??
? ? ??
? ? ??
? ? ??
? ? ??
? ? ??
? ? ??
? ? ??
? ?
? ?
? ?



總結

以上是生活随笔為你收集整理的LA4851餐厅(求好的坐标的个数)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。