1. 程式人生 > >HDU 4268 Alice and Bob(貪心+STL)

HDU 4268 Alice and Bob(貪心+STL)

該題一開始我用multiset寫了一發,寫的比較裸,TLE了 。 後來隊友想到了一個比較好的方法 :將兩個結構體排序之後,從大到小列舉Alice的h,對於每個h,將Bob中滿足h小於當前h的牌的w加進multiset,然後用二分函式查詢一下大於等於當前w的第一個數,當前迭代器的上一個指標就是小於當前w的最大w,找到就刪除。那麼也就是我們用了這樣的貪心策略:對於Alice的每一張牌,要覆蓋一張Bob的儘可能h和w接近它的牌  。  為什麼這樣的貪心策略是正確的呢 ? 假如不這樣,那麼當前牌會覆蓋一張w更小的牌,假如之後的牌中有w比當前牌小,那麼這樣是不划算的, 如果有牌的w比當前牌大,那麼顯然也不可能更優 。 

細節參見程式碼:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
#include<list>
#include<cmath>
#include<set>
#include<queue>
using namespace std;
typedef long long ll;
const long long maxn = 100000+5;
int T,n,m;
struct node{
    int h,w;
    bool operator < (const node& rhs) const {
        return h < rhs.h || (h == rhs.h && w < rhs.w);
    }
}a[maxn],b[maxn];
multiset<int> g;
int main() {
    scanf("%d",&T);
    while(T--){
        g.clear();
        scanf("%d",&n);
        for(int i=0;i<n;i++) scanf("%d%d",&a[i].h,&a[i].w);
        for(int i=0;i<n;i++) scanf("%d%d",&b[i].h,&b[i].w);
        sort(a,a+n);
        sort(b,b+n);
        int cur = 0,cnt=0;
        for(int i=0;i<n;i++){
            while(cur<n&&b[cur].h<=a[i].h) g.insert(b[cur++].w);
            if(g.size()==0) continue;
            multiset<int> ::iterator it = g.lower_bound(a[i].w);
            if(it!=g.begin()) it--;
            if(*it<=a[i].w) g.erase(it),cnt++;
        }
        printf("%d\n",cnt);
    }
    return 0;
}


相關推薦

HDU 4268 Alice and Bob貪心+STL

該題一開始我用multiset寫了一發,寫的比較裸,TLE了 。 後來隊友想到了一個比較好的方法 :將兩個結構體排序之後,從大到小列舉Alice的h,對於每個h,將Bob中滿足h小於當前h的牌的w加進multiset,然後用二分函式查詢一下大於等於當前w的第一個數,當前迭代

hdu 4268 Alice and Boblower_bound+貪心

題目連結: 解題思路: 題目大意: Alice 和 Bob  分別有 n 張牌,每張牌有一個長(h)和一個寬(w),Bob把他的牌依次排一排,Alice用他的牌依次去覆蓋,求最多可以 覆蓋多少,覆蓋

HDU 4268-Alice and Bob( STL: set)

題意: 要求找出 Alice 的卡片覆蓋 Box的卡片的最大張數, 長和寬都大於等於另一張卡片則能夠覆蓋.. 思路:  貪心思想+STL           一開始想到的是賽馬問題, 從最大的開始比, WA 了, 問了下靜姐才明白, 不能從最大比, 而應該從最小比, 因為

HDU 5054 Alice and Bob數學

esp contain before mod see min roc axis factor 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=5054 Problem Description Bob and A

洛谷3971 BZOJ5158 TJOI2014 Alice and Bob 構造 貪心 拓撲排序 dp 堆

題目連結 題意: 給你一個a陣列,a中的每一個元素表示以該元素開頭的在陣列x中的最長上升子序列長度,要你自己構造x陣列,使得對x陣列求最長下降子序列後每個位置開始的最長下降子序列長度之和最大。n<=1e5,保證a可以用過一個

HDU 6438 Buy and Resell貪心+優先佇列+set

Description 有nnn個城市,第iii個城市商品價格為aia_iai​,從111城市出發依次經過這nnn個城市到達nnn城市,在每個城市可以把手頭商品出售也可以至多買一個商品,問最大收益以及在

HDU4268 Alice and Bob貪心+SET】

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4719    Accepted Submission(s)

hdu(1069)——Monkey and BananaLIS變形

res 排序 inf popu 坐標 trac 保存 i++ urn 題意: 如今給你n個石塊,然後它由坐標來表示(x,y,z)。可是它能夠有不同的方法,也就是說它的三個坐標能夠輪換著來的。 石塊的數量不限,可是每次都必須保持上底面的長和寬嚴格遞減,然後問你用這些石塊所

【POJ】1704 Georgia and BobStaircase Nim

row over diff 題目 player 技術分享 需要 ber 排序。 Description Georgia and Bob decide to play a self-invented game. They draw a row of grids on pape

POJ 1704 Georgia and Bob階梯博弈題解

n-2 有一個 n-1 seed class ++ article scanf clas 題意:有一個一維棋盤,有格子標號1,2,3,......有n個棋子放在一些格子上,兩人博弈,只能將棋子向左移,不能和其他棋子重疊,也不能跨越其他棋子,不能超越邊界,不能走的人輸 思路:

HDU 6446 Tree and Permutation 思路+dp

題意 給你n個點,n-1條邊的一棵樹,現在有一個從 (1...n) ( 1... n )

HDU - 4803 Poor Warehouse Keeper 貪心模擬

Jenny is a warehouse keeper. He writes down the entry records everyday. The record is shown on a screen, as follow:  There are only two b

HDU 6446 Tree and Permutation根節點

這道題我記得當時是在網上找的板子。。。。 http://acm.hdu.edu.cn/showproblem.php?pid=6446 先定義一個數n,n個數有n!種排列方法,然後求兩條邊的權值之和,顯然他是有(n-1)!2種結果,對於兩個相鄰的點來說,他的計算的次數其實是兩個邊的節點所形成

HDU 4803 Poor Warehouse Keeper貪心+精度

題解: 先求出最後的單價,我們每一步都於逼近單價。 因為只有總價部分可以優化成加一個整數,所以每一步去就加上目標總價與當前總價差多少即可。 #include <algorithm> #include <iostream> #include

HDU-4015:Mario and Mushrooms找規律

Mario and Mushrooms Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Othe

HDU 6064 RXD and numbersBEST theorem

RXD and numbers Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 40

hdu 6318 Swaps and Inversions歸併排序

Swaps and Inversions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1212    Acc

CodeForces 518E Arthur and Questions貪心 + 思維題解

ios else scanf style cor div rect 數字 \n 題意:給你a1~an,k,要求a1 + ... + ak < a2 + .... + ak+1 < a3 + ... + ak+2 <...,然後這裏的ai有可能是?,要求你填

Alice and Bob HDU - 4111 SG函數

想要 scan pla using mem 進行 span pri gif Alice and Bob are very smart guys and they like to play all kinds of games in their spare time. The

[TJOI2014]Alice and Bob[拓撲排序+貪心]

pen arrow 如果 pri 說我 getc ret get bool 題意 給出一個序列的以每一項結尾的 \(LIS\) 的長度a[],求一個序列,使得以每一項為開頭的最長下降子序列的長度之和最大。 \(n\leq 10^5\) 。 分析 最優解一定是一個排列,因為