JZOJ2023年8月11日提高組T2 寶石

2022-05-05 17:00:23 字數 1564 閱讀 9811

見上帝動了惻隱之心,天後也想顯示一下慈悲之懷,隨即從口袋中取出一塊魔術方巾,讓身邊的美神維納斯拿到後堂的屏風上去試試,屏風是正方形的,高和寬方向上各劃有m條魚屏風的邊平行的直線,平行直線間的距離為1厘公尺。這2m條直線共有m*m個交點,在某些交點上鑲嵌著寶石。如果魔術方巾的邊與屏風的邊平行且魔術方巾觸碰到屏風上鑲嵌著的寶石,就將與這些寶石等值的金銀送給人們。維納斯想讓魔術方巾觸碰到的寶石的價值最多,可要在短短的1秒鐘之內解決問題,也感到力不從心,你能幫幫她嗎?

輸入檔案gem.in的第一行有三個正整數m,n,k,數與數之間用乙個空格分隔。其中m為屏風在高和寬方向上被劃分出的直線數。魔術方巾為正方形的,它的邊長為k厘公尺。n為屏風上寶石的個數。

接下來的n行,每行三個正整數,依次表示寶石所在直線的行號、列號、寶石的價值,數與數之間用乙個空格分隔。

輸出檔案gem.out只有乙個正整數,為魔術方巾觸碰到的寶石的最大價值總數。

10 4 4

1 1 9

2 3 5

6 2 12

4 5 6

30%的資料,1≤m≤500,1≤n≤10000,1≤k≤100;

60%的資料,1≤m≤3000,1≤n≤10000,1≤k≤1000;

100%的資料,1≤m≤50000,1≤n≤50000,1≤k≤10000;

【輸入樣例2】

10 4 3

1 1 9

2 3 5

6 2 12

4 5 6

【輸出樣例2】

18給出\(n\)個寶石,每個寶石都有一定的價值

可以放置乙個\(k*k\)的矩陣

問如何放置使得價值最大

問最大價值

將題目轉換一下

有\(n\)個\(k*k\)的矩陣,每個矩陣都有一定的價值,問乙個最大價值的重疊矩陣

容易想到掃瞄線

按照縱座標排序

維護兩個指標

乙個是加入(\(i\)),乙個是刪除(\(j\))

那麼當\(j\)的縱座標+\(k\)小於\(i\)的縱座標時,刪掉\(j\)

可以用線段樹來維護區間修改

然後每操作一次就用樹頂來更新答案

#include#includeusing namespace std;

struct node

a[50005];

int n,m,k,i,ans,tot,tree[200005],lazy[200005];

bool cmp(node x,node y)

int mid=(l+r)>>1;

update(now);

if (p<=mid) modify(now<<1,l,mid,p,q,x,bj);

if (q>mid) modify(now<<1|1,mid+1,r,p,q,x,bj);

tree[now]=max(tree[now<<1],tree[now<<1|1]);

}int main()

while (a[tot].y+kans=max(ans,tree[1]);

}printf("%d\n",ans);

return 0;

}

JZOJ2023年8月11日提高組T4 景點中心

話說寧波市的中小學生在鎮海中學參加計算機程式設計比賽,比賽之餘,他們在鎮海中學的各個景點參觀。鎮海中學共有n個景點,每個景點均有若干學生正在參觀。這n個景點以自然數1至n編號,每兩個景點的編號均不同。每兩個景點之間有且只有一條路徑。選擇哪個景點集中的學生,才能使所有學生走過的路徑之和最小呢?如果存在...

2023年11月30日leetcode每日一題

leetcode刷題記錄 767.重構字串 思路 分為兩大部分,第一部分判斷字串是否可以重構,第二部分判斷重構字串 第一部分 找出最大出現次數字母的次數,判斷是否超過 n 1 2,若超過則返回空字串,若不超過則可以進行重組織 第二部分 先對出現次數小於等於n 2的字母在奇數下標上進行排序,奇數下標滿...

2023年2月8日 OJ習題

這類題的常規思路是結構體排序,但是本題由於並沒有多種元素,因此用不著結構體,僅僅是陣列排序就可以 include using namespace std int n,m,o int f 110 bool cmp int a,int b intmain return0 先打表,然後直接些就好了 inc...