SRM372 div2 hard
501にボコボコにされて意気消沈してるから(読んでるひといないと思うけど)
解説はない
ってうかディスプレイの文字が霞んで見えるんだよ。もうだめだよ。
conkyのuptimeが15時間超えてるよ。やばいよ。
#include <string> #include <queue> #include <vector> #include <utility> using namespace std; typedef pair<int,pair<int,int> > D; D makeD(int a,int b,int c) { return make_pair(a,make_pair(b,c)); } class RainyDay { public: int n; int wetTime[50][50]; string path,forecast; int rainy(int t,int p) { return (path[p]=='.' && forecast[t%n+p]=='R')?1:0; } int minimumRainTime(string _path, string _forecast) { int home,first,mv; path=_path; forecast=_forecast+_forecast; n=path.size(); for(int i=0;i<n;i++) { if(path[i]=='H') home=i; if(path[i]=='Y') first=i; } mv=(first<home)?1:-1; for(int i=0;i<50;i++) for(int j=0;j<50;j++) wetTime[i][j]=(1<<28); priority_queue<D,vector<D>,greater<D> > que; que.push(makeD(0,0,first)); while(!que.empty()) { int w=que.top().first; int t=que.top().second.first,p=que.top().second.second; que.pop(); if(t<250 && 0<=p && p<n && w<wetTime[t][p]) { wetTime[t][p]=w; int ww; ww=w+rainy(t,p)+rainy(t+1,p); que.push(makeD(ww,(t+1)%n,p)); ww=w+rainy(t,p+1)+rainy(t+1,p+1); que.push(makeD(ww,(t+1)%n,p+1)); ww=w+rainy(t,p-1)+rainy(t+1,p-1); que.push(makeD(ww,(t+1)%n,p-1)); } } int minWet=(1<<28); for(int i=0;i<50;i++) minWet=min(minWet,wetTime[i][home]); return minWet; } };