标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3340 Accepted Submission(s): 843
开始没读懂题意,后来闰年天数弄错了,再后来二月天数弄错了,最后没有清零,最终A的时候我也是醉了。。。
单调队列
#include <cstdio> #include <iostream> #include <sstream> #include <cmath> #include <cstring> #include <cstdlib> #include <string> #include <vector> #include <map> #include <set> #include <queue> #include <stack> #include <algorithm> using namespace std; #define ll long long #define _cle(m, a) memset(m, a, sizeof(m)) #define repu(i, a, b) for(int i = a; i < b; i++) #define repd(i, a, b) for(int i = b; i >= a; i--) #define sfi(n) scanf("%d", &n) #define sfl(n) scanf("%I64d", &n) #define pfi(n) printf("%d\n", n) #define pfl(n) printf("%I64d\n", n) #define MAXN 1000005 string mon[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; ll py[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; ll ny[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; ll ppy[13]; ll nny[13]; ll dy[MAXN]; map<string, ll> mh; struct P{ ll hh, rr; P(ll _h = 0, ll _w = 0) : hh(_h), rr(_w) {} bool operator < (const P& t) const { return hh > t.hh; } }order[2505]; struct W{ ll t, w; W(ll _t = 0, ll _w = 0) : t(_t), w(_w) {} }; queue<P> O; deque<W> T; void get_np() { ppy[0] = 0; repu(i, 1, 13) ppy[i] = py[i - 1] + ppy[i - 1]; nny[0] = 0; repu(i, 1, 13) nny[i] = ny[i - 1] + nny[i - 1]; } void get_m() { for(int i = 0; i < 12; i++) mh[mon[i]] = i + 1; } bool is_y(int year) { if(year % 400 == 0) return true; if(year % 4 == 0) { if(year % 100 == 0) return false; else return true; } return false; } void get_d() { dy[0] = 0; for(int i = 2000; ; i++) { if(is_y(i)) dy[i - 2000 + 1] = dy[i - 2000] + 366; else dy[i - 2000 + 1] = dy[i - 2000] + 365; if(dy[i - 2000 + 1] > 10000) return ; //cout<<i - 2000 + 1<<" : "<<dy[i - 2000 + 1]<<endl; } } int main() { get_d(); get_m(); get_np(); ll n, m; string s; ll mm, yy, dd, hh, rr, tt; ll life, cost; while(sfl(n), sfl(m), n + m) { T.clear(); repu(i, 0, n) { tt = 0; cin>>s; scanf("%I64d %I64d %I64d %I64d", &dd, &yy, &hh, &rr); mm = mh[s]; tt += dy[yy - 2000]; if(is_y(yy)) tt += ppy[mm - 1]; else tt += nny[mm - 1]; tt += (dd - 1); tt = tt * (ll)(24); tt += (hh + 1); O.push(P(tt, rr)); //cout<<tt<<"**************"<<rr<<endl; } sfl(life), sfl(cost); ll x; ll sum = 0; repu(i, 1, m + 1) { sfl(x); while(!T.empty() && x <= T.back().w + (i - T.back().t) * cost) T.pop_back(); T.push_back(W(i, x)); while(!O.empty() && O.front().hh == i) { while(!T.empty() && (i - T.front().t) > life) T.pop_front(); sum += O.front().rr * (T.front().w + cost * (i - T.front().t)); O.pop(); } } pfl(sum); } return 0; }
标签:
原文地址:http://www.cnblogs.com/sunus/p/4719431.html