1. 程式人生 > >Alice's mooncake shop【HDU 4122】【單調佇列】

Alice's mooncake shop【HDU 4122】【單調佇列】

題目連結


  這道題還稍微有了點坑點,就是一開始過了的時候沒想到的,就是在一開始處理的時候,我們用到單調佇列,但是單調佇列一開始,我用陣列模擬,所以先放進去了區間長度-1個元素,但是,這個時候,就會有問題,就是,如果期限剛好在區間內的話,我們就會少去這個答案,所以不行!我們一邊插入的同時,還需要一邊考慮,這樣才能達到完整的解。


對了,附上一隻小貓咪——挺可愛的說:


/*
 *                             UM.
 *                            [email protected]@1                                                                    
[email protected]
* [email protected]@@[email protected] [email protected]@[email protected] * :@[email protected],[email protected]@O ,
[email protected]
@[email protected]@Br * @[email protected] [email protected]@BS [email protected]@@@[email protected] * [email protected]@B [email protected]
@i [email protected]@@[email protected]@ * ,[email protected]: [email protected]@@Z [email protected]@[email protected] * [email protected] :@[email protected] [email protected]@[email protected]@. * :@[email protected] @@@B: [email protected]@[email protected] * @[email protected] [email protected]@B. ..::ir7vvYUuU777r::. [email protected]@[email protected]@S * [email protected], [email protected] :[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@[email protected]@[email protected]@[email protected]@[email protected] * [email protected]@ @[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected]@@ * @[email protected] [email protected]@@@MSur:. [email protected]@@@ * @@@. [email protected]@@B * [email protected]@ [email protected]@[email protected] * [email protected] @@@[email protected]@B * @@BS [email protected]@@[email protected]@ * @@@7 [email protected]@[email protected] * [email protected] [email protected]@[email protected]@7 * [email protected]@: [email protected]@[email protected]@M * [email protected]@, [email protected]@@[email protected]@[email protected]@[email protected]@ * [email protected] [email protected]@[email protected]@[email protected]@@@@[email protected]@[email protected]: @@@B * [email protected]: [email protected]@[email protected]@[email protected]: @[email protected] * [email protected] ,v. @[email protected] * [email protected], Y7 @[email protected] [email protected]@ * :[email protected]@@B2: @@B7 @[email protected] [email protected]@[email protected]: [email protected] * [email protected]@@[email protected]@[email protected] [email protected]@B [email protected]@[email protected]@Ou: [email protected] * :[email protected]@[email protected]@2. :7::::[email protected]@[email protected] :[email protected]@[email protected]@[email protected]@G. @[email protected] * [email protected]@@[email protected]@ :@[email protected]@@@[email protected]@@1 [email protected]@[email protected]@@5 [email protected]@2 * [email protected] ,@B1 L0EZZG0F7: .:, [email protected]@M7 * [email protected]@ ,[email protected]@[email protected]@B * @[email protected] :@[email protected]@@r :@@@@[email protected]:,, * [email protected] :2ZS; :@[email protected]@[email protected] [email protected]@[email protected] * @[email protected] @@@[email protected]@ [email protected]@[email protected] @[email protected] * [email protected] [email protected]@[email protected] [email protected]@[email protected] ,[email protected] * @[email protected] @[email protected]@@@i rL7. [email protected] * [email protected]: [email protected]@M. [email protected]@. * .;[email protected]@@[email protected]@[email protected]@. . @[email protected] *@@@[email protected]@[email protected]@@@[email protected] :[email protected]@[email protected], *[email protected] ,@@B [email protected]@[email protected]@[email protected] * @@@U [email protected]@[email protected]@i * [email protected]@ :[email protected] [email protected]@ * [email protected]@ [email protected]@k 2i * [email protected] .7jXEGqF7: [email protected]@L * [email protected] [email protected]@[email protected]@[email protected]@. :@[email protected]: * [email protected]@ @@MYr::[email protected] [email protected]@G * [email protected]@@S ,[email protected]@, * [email protected]@@BF [email protected]@Br * [email protected]@[email protected] ,[email protected]@@B8, * [email protected]@[email protected], :[email protected]@[email protected] * [email protected]@[email protected]@P7, [email protected]@[email protected]@[email protected]@[email protected] * ,[email protected]@[email protected]@@@BOP2L7i:,. ..,:[email protected]@[email protected]@@@[email protected]@[email protected];[email protected]@ * @[email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected]@@@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@BM0SJ7i::::i:,[email protected]@ * [email protected] ::i;[email protected]@[email protected]@[email protected]@[email protected]@@@B1UFuj77ii:::::::iir;r;[email protected] * @[email protected]:i:i:i::::::::::[email protected]@BMYi:i;[email protected]@N:.::i:iirir;r;rii::::[email protected]@ * [email protected]@X::,::::iirir;riri:[email protected]@1 ,@[email protected]:;;r;rii:i::::[email protected]@@@@B * @@@[email protected]:::::::[email protected]@@i ..,.. @[email protected]@,,:::::[email protected]@[email protected]@[email protected]@: * [email protected]@@@[email protected]@[email protected]@[email protected] .,,:,, :. @[email protected]@[email protected]@[email protected]@@@BS: @@B1 * [email protected]@ [email protected]@[email protected]@[email protected]@[email protected] .,:,,[email protected]@[email protected] [email protected]@[email protected]@[email protected]@BM57. [email protected] * [email protected]@: .,[email protected]@u ..,.. [email protected]@@@[email protected], ,@[email protected] * @@@8 [email protected]@: . :[email protected]@@ [email protected]@2 * [email protected]@@@ [email protected]@u [email protected]@B. [email protected] * ,@[email protected] [email protected]@BOv:.:[email protected]@M @[email protected] * vNi [email protected]@[email protected]@[email protected]@BM: [email protected] * 758BMqJ, * * . YO. vq :G Z: * [email protected]@Br @@r rBE @B [email protected]@@@@[email protected] i::::.OB1.:::[email protected]::::i @[email protected]@U:@@[email protected]@BPEBu * [email protected]@[email protected] [email protected] [email protected] BM [email protected]@Z [email protected]@[email protected]@@@[email protected]@[email protected]@[email protected]@@[email protected] [email protected]@1 BX :@k [email protected]: * iB iBi [email protected] [email protected]@BGMZZ @@F ,B Pi [email protected] Bq @i [email protected] [email protected] * [email protected]@Z7LLri;72. [email protected]@@ @BX @@@[email protected]@@@@@[email protected]@@[email protected]@B [email protected] @F Bi @q @[email protected] @B * [email protected]@[email protected]@@[email protected]@[email protected]@, [email protected] @@ .Bk .:u; [email protected]: Zv [email protected] Bk @,;@ ,BY @B [email protected] * [email protected] @G 5. ,@v BZ :::,[email protected] .::i, @B [email protected] [email protected] [email protected] @F B:[email protected] [email protected] @M @B * 7B: ,vO, @@ [email protected]: @B [email protected]:[email protected]@[email protected]@@[email protected]@BM @@. B: [email protected] [email protected] BS @i [email protected] B. @O [email protected] * ,[email protected]@[email protected] [email protected] @BB [email protected] @B @S : [email protected] .. 7B @F @7 B7 @ @B @B * [email protected]@UOBr @[email protected] [email protected] .BZ [email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@, [email protected] BF @i @G [email protected]@B [email protected] * [email protected], [email protected] ;r @@@. [email protected] [email protected] [email protected]@q BP:[email protected] @u,. @B * LBi [email protected]@ @@ @B:[email protected] BM [email protected] rB [email protected] [email protected] Pi @XZ8r . [email protected] * . [email protected] [email protected] ,[email protected], @B [email protected] N, [email protected] ,[email protected] [email protected], [email protected]@B1r Br @@ * [email protected]@B ,i [email protected]@B, [email protected]: @[email protected]@F [email protected]: [email protected] :OBZ [email protected] [email protected]@B: * .ll rB. : */ #include <iostream> #include <cstdio> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <limits> #include <vector> #include <stack> #include <queue> #include <set> #include <map> #define lowbit(x) ( x&(-x) ) #define pi 3.141592653589793 #define e 2.718281828459045 #define INF 0x3f3f3f3f #define SonG_y main using namespace std; typedef unsigned long long ull; typedef long long ll; const int maxN = 2507; const int dir[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int N, M, tot; string month; int day, year, hour; ll need[maxN]; //月、日、年、小時、需求 int T, S; int real_Time[maxN]; int get_month(string ss) { if(ss == "Jan") return 1; else if(ss == "Feb") return 2; else if(ss == "Mar") return 3; else if(ss == "Apr") return 4; else if(ss == "May") return 5; else if(ss == "Jun") return 6; else if(ss == "Jul") return 7; else if(ss == "Aug") return 8; else if(ss == "Sep") return 9; else if(ss == "Oct") return 10; else if(ss == "Nov") return 11; else return 12; } inline bool lucky_year(int NEW_year) { return (NEW_year%4 == 0 && NEW_year%100 != 0) || (NEW_year%400 == 0); } inline void get_TIME(int i) { int tmp = hour; tmp += (day - 1) * 24; int yue = get_month(month); for(int i=1; i<yue; i++) { if(i == 2 && lucky_year(year)) tmp += 29 * 24; else tmp += dir[i] * 24; } for(int i=2000; i<year; i++) { if(lucky_year(i)) tmp += 366 * 24; else tmp += 365 * 24; } real_Time[i] = tmp; } const int maxM = 2e5 + 7; ll order[maxM]; ll cost[maxM], minn[maxM]; ll ans = 0; struct node { ll val; int id; node(ll a=INF, int b=0):val(a), id(b) {} }p[maxM]; inline void get_MInn(int nn, int kk) //總長、區間長度 { int head = 1, tail = 0; for(int i=0; i<kk-1; i++) { while(head<=tail && p[tail].val>=cost[i]) tail--; p[++tail] = node(cost[i], i); if(order[i]) ans += order[i] * ( p[head].val - (tot - i) * S ); } for(int i=kk-1; i<=nn; i++) { while(head<=tail && p[tail].val>=cost[i]) tail--; p[++tail] = node(cost[i], i); while(p[head].id <= i - kk + 1) head++; minn[i - kk + 1] = p[head].val; if(order[i]) ans += order[i] * ( minn[i - kk + 1] - (tot - i) * S ); } } int SonG_y() { while(scanf("%d%d", &N, &M) && (N | M)) { memset(order, 0, sizeof(order)); for(int i=1; i<=N; i++) { cin>>month; scanf("%d%d%d%lld", &day, &year, &hour, &need[i]); get_TIME(i); order[real_Time[i]] += need[i]; } scanf("%d%d", &T, &S); tot = T + M - 1; //這一天是最後的期限 for(int i=0; i<M; i++) { scanf("%lld", &cost[i]); cost[i] += S * (tot - i); } for(int i=M; i<=tot; i++) cost[i] = INF; ans = 0; get_MInn(tot, T+1); printf("%lld\n", ans); } return 0; } /* 1 10 Jan 1 2000 2 10 5 2 20 20 20 10 10 8 7 9 5 10 ans:240 */ /* * UM. * [email protected]@1 [email protected] * [email protected]@@[email protected] [email protected]@[email protected] * :@[email protected],[email protected]@O ,[email protected]@[email protected]@Br * @[email protected] [email protected]@BS [email protected]@@@[email protected] * [email protected]@B [email protected]@i [email protected]@@[email protected]@ * ,[email protected]: [email protected]@@Z [email protected]@[email protected] * [email protected] :@[email protected] [email protected]@[email protected]@. * :@[email protected] @@@B: [email protected]@[email protected] * @[email protected] [email protected]@B. ..::ir7vvYUuU777r::. [email protected]@[email protected]@S * [email protected], [email protected] :[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@[email protected]@[email protected]@[email protected]@[email protected] * [email protected]@ @[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected]@@ * @[email protected] [email protected]@@@MSur:. [email protected]@@@ * @@@. [email protected]@@B * [email protected]@ [email protected]@[email protected] * [email protected] @@@[email protected]@B * @@BS [email protected]@@[email protected]@ * @@@7 [email protected]@[email protected] * [email protected] [email protected]@[email protected]@7 * [email protected]@: [email protected]@[email protected]@M * [email protected]@, [email protected]@@[email protected]@[email protected]@[email protected]@ * [email protected] [email protected]@[email protected]@[email protected]@@@@[email protected]@[email protected]: @@@B * [email protected]: [email protected]@[email protected]@[email protected]: @[email protected] * [email protected] ,v. @[email protected] * [email protected], Y7 @[email protected]