D題 1 #include<iostream> 2 #include<map> 3 #include<algorithm> 4 #define int long long 5 using namespace std; 6 7 /*解題思路:題中的乘以10的倍數,只是虛晃,可以不用在意,因為只要保證字 ...
D題
1 #include<iostream> 2 #include<map> 3 #include<algorithm> 4 #define int long long 5 using namespace std; 6 7 /*解題思路:題中的乘以10的倍數,只是虛晃,可以不用在意,因為只要保證字元串的大小就行了,字元串大的乘以相同大小的數自然還是大的 8 如果在輸入的字元串中只存在一個最大長度的字元串,比如輸入3個字元串,分別是:abc acb acbb 自然是acbb這個字元串最大,找出來直接輸出即可 9 如果在輸入的字元串中存在多個相同長度的最大字元串,比如輸入4個字元串,分別是ab abcd abdc accc 可以看出來,abcd這個字元串最大,因為字元串的比較大小直接可以用 10 比較操作符來進行比較,而我們要在後三個字元串中挑出最大的,如何實現呢? 11 將最大長度的字元串都反轉以下,使用reverse反轉函數,上述例子將變為:dcba cdba ccca 再從這裡面找出最大的字元串即可,即為dcba 最後輸出再次反轉回來即可 12 */ 13 signed main() 14 { 15 int t; 16 cin >> t;//輸入樣例個數 17 while(t--) 18 { 19 map<int,int> vis;//使用一個圖,相當於一個vis[]數組,用於存儲最長字元串有多少個 20 string str[100];//開一個字元串數組,用於存儲輸入的字元串,本題只要大於10即可 21 string ans;//如果存在唯一一個最大字元串長度的字元串,則用於保存它,用於輸出 22 int n; 23 int maxn = 0;//找出最長字元串 24 cin >> n;//輸入字元串個數 25 for(int i = 1;i <= n;i++) 26 { 27 string temp; 28 cin >> temp;//迴圈輸入n個字元串 29 int len = temp.size();//得到這個字元串的長度,進行下麵比較操作 30 if(maxn < len) 31 { 32 ans = temp;//如果有出現暫時是最長的字元串,先記錄到ans中 33 maxn = max(maxn,len);//更新maxn的值,使其保持最大狀態 34 } 35 vis[len]++;//將此時的字元串長度記錄到vis數組中,出現幾個記錄幾個 36 reverse(temp.begin(),temp.end());//將字元串反轉; 37 str[i] = temp;//將反轉後的結果記錄到str字元數組當中 38 } 39 //判斷最長的字元串是否是一個,是,則直接輸出,否則肯定存在多個相同長度的最長字元串 40 if(vis[maxn] == 1) 41 { 42 cout << ans << endl; 43 continue; 44 } 45 string res;//res相當於臨時變數,用於存儲最後答案 46 //以下的for操作是在反轉後的字元串中通過字元串比較操作符直接選出最大的字元串 47 for(int i = 1;i <= n;i++) 48 { 49 if(str[i].size() == maxn)//找出最長的字元串 50 { 51 if(str[i] > res)//通過字元串比較操作符進行比較,選出大的記錄在res當中 52 { 53 res = str[i]; 54 } 55 } 56 } 57 reverse(res.begin(),res.end());//由於得出的res是反轉後的,必須再將其反轉回來 58 cout << res << endl; 59 } 60 return 0; 61 }
E題
1 #include<iostream> 2 #define int long long 3 #define mod 2019 4 using namespace std; 5 int arr[10000000]; 6 7 signed main() 8 { 9 //在未開始輸入的時候先對數據進行預處理,可大大降低時間複雜度 10 arr[0] = 3; 11 for(int i = 1;i <= 1000001;i++) 12 arr[i] = (arr[i - 1] * 2) % mod; 13 14 //等預處理完成後,再進行輸入輸出操作,就簡便多了 15 int t; 16 cin >> t; 17 while(t--) 18 { 19 int n; 20 cin >> n; 21 cout << arr[n - 1] << endl; 22 } 23 return 0; 24 }