1.題目A:Karen and Morning
題意:
給出hh:mm格式的時間,問至少經過多少分鐘后,該時刻為回文字符串?
思路:
簡單模擬,從當前時刻開始,如果hh的回文rh等于mm則停止累計。否則,根據rh和mm的大小來累計sum,然后hh+1,不斷嘗試。


1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int hh,mm; 6 char c; 7 while (cin >> hh >> c >> mm) 8 { 9 int sum = 0; 10 bool firsthour = true; 11 while (1) 12 { 13 int rh = hh % 10 * 10 + hh / 10; 14 if (rh == mm) break; 15 else 16 { 17 if (rh < 60) 18 { 19 if (firsthour) 20 { 21 firsthour = false; 22 if (rh >= mm) 23 { 24 sum += rh - mm; 25 break; 26 } 27 else 28 { 29 sum += 60 - mm; 30 mm = 0; 31 hh = (hh + 1) % 24; 32 } 33 } 34 else 35 { 36 sum += rh; 37 break; 38 } 39 } 40 else 41 { 42 if (firsthour) sum += 60 - mm,mm=0,firsthour=false; 43 else sum += 60; 44 hh = (hh + 1) % 24; 45 } 46 47 } 48 } 49 cout << sum << endl; 50 } 51 return 0; 52 }
2.題目B: Karen and Coffee
題意:
給出n個已知區間,然后詢問q個區間,問詢問區間中至少被k個已知區間包含的點為幾個。
思路:
一開始想著對每個已知區間中的值累加,然后對每次詢問[l,r],遍歷l——r,妥妥超時~~
然后看了些大神的代碼,首先不必要對每個已知區間中的值累加,只要在已知區間的開始和結束的位置做標記,然后對于查詢,可以預處理用前綴和來記錄1~i滿足條件的數目,然后O(1)便能得出答案。還有的巨巨用線段樹來維護,至少比O(n)的時間少,應該是O(logn)吧。。。
下面給出巨巨的鏈接:
線段樹實現
前綴和實現
?