NOIp模擬2 挖掘機
阿新 • • 發佈:2017-08-12
using scanf 註釋 clas 試題 min sca sort std
試題描述 |
今天,czy開著挖掘機去上學(……)。但是他發現他的mz滿天下,所以一路上他碰到了好多他的mz。一開始他以1km/min的速度(=60km/h……)開著挖掘機前進。 |
輸入格式 |
輸入第一行2個數n,m,分別表示mz數和czy與學校的距離(km) |
輸出格式 |
輸出一個整數,表示到達學校的時間。如果不能整除,直接輸出整數部分即可。 |
輸入示例 |
2 20 |
輸出示例 |
47 |
註釋說明 |
對於30%數據,n,m<=50 |
【分析】
模擬,分別存儲按時間出現和按路程出現的妹子,每次比較時間,註意判斷邊界。
時間一急寫得就很亂,反正也沒人會看啦~
【代碼】
1 #include <bits/stdc++.h> 2using namespace std; 3 4 int n, m, di[200020], ti[200000], d, t, x, dv; 5 double vn, xn, tn; 6 char s[5]; 7 8 void init() { 9 cin >> n >> m; 10 for (int i=1;i<=n;++i) { 11 scanf("%s", s); 12 scanf("%d", &x); 13 if (s[0]==‘D‘) { 14 di[0]++;15 di[di[0]]=x; 16 } 17 else { 18 ti[0]++; 19 ti[ti[0]]=x; 20 } 21 } 22 sort(di+1, di+di[0]+1); 23 sort(ti+1, ti+ti[0]+1); 24 } 25 26 void sovle() { 27 d=t=vn=1, xn=tn=0, dv=2; 28 for (int i=1;i<=di[0]+ti[0];++i) { 29 if (di[d] >= m) { 30 d++; 31 continue; 32 } 33 if (xn+(ti[t]-tn)*vn >= m) { 34 t++; 35 continue; 36 } 37 if (t==ti[0]+1 && d!=di[0]+1) { 38 tn+=double(di[d]-xn)/vn, xn=double(di[d]), vn=(1/double(dv)), dv++, d++; 39 continue; 40 } 41 if (d==di[0]+1 && t!=ti[0]+1) { 42 xn+=(double(ti[t])-tn)*vn, tn=double(ti[t]), vn=(1/double(dv)), dv++, t++; 43 continue; 44 } 45 if (((di[d]-xn)/vn)<(ti[t]-tn) && d!=di[0]+1) 46 tn+=double(di[d]-xn)/vn, xn=double(di[d]), vn=(1/double(dv)), dv++, d++; 47 else if (t!=ti[0]+1) 48 xn+=(double(ti[t])-tn)*vn, tn=double(ti[t]), vn=(1/double(dv)), dv++, t++; 49 } 50 tn+=double(m-xn)/vn; 51 printf("%.0lf\n", tn-0.5); 52 } 53 54 int main() { 55 init(); 56 sovle(); 57 }
NOIp模擬2 挖掘機