codeforces CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes) Editorial前三题讲解
前提聲明:題目均已開中文翻譯,可能會有偏差,但不影響理解!!!
目錄
A
題目
代碼
講解
B
題目
代碼
講解
C
題目
代碼
講解
A
題目
您將獲得一個數(shù)組a_1、a_2、\ldots、a_n一個1?,一個2?,...,一個n?的正整數(shù)。一對好是一對指數(shù)(一、j)(i,j)跟1 \leq i, j \leq n1≤i,j≤n這樣,對于所有人來說1 \leq k \leq n1≤k≤n,則以下相等性成立:
|a_i - a_k|+ |a_k - a_j|= |a_i - a_j|,,哪里|x|∣x∣表示的絕對值xx.
找到一對好搭檔。請注意,我我可以等于jj.
輸入
輸入由多個測試用例組成。第一行包含單個整數(shù)tt?(1 \leq t \leq 10001≤t≤1000) ― 測試用例的數(shù)量。測試用例的說明如下。
每個測試用例的第一行包含一個整數(shù)nn?(1 \leq n \leq 10^51≤n≤105) ― 數(shù)組的長度。
每個測試用例的第二行包含nn整數(shù)a_1、a_2、\ldots、a_n一個1?,一個2?,...,一個n??(1 \leq a_i \leq 10^91≤一個我?≤109) 其中a_i一個我?是我我-數(shù)組的第 1 個元素。
總和nn對于所有測試用例,最多是2 \cdot 10^52?105.
輸出
對于每個測試用例,打印一行具有兩個空格分隔索引我我和jj形成一對很好的陣列。案例i=j我=j是允許的。可以看出,這樣的一對始終存在。如果有多個好的配對,請打印其中任何一個。
示例 1
| 3 3 5 2 7 5 1 4 2 2 3 1 2 | 2 3 1 2 1 1 |
注意
在第一種情況下,對于i = 2我=2和j = 3j=3平等適用于所有人kk:
- k = 1k=1:|a_2 - a_1|+ |a_1 - a_3|= |2 - 5|+ |5 - 7|= 5 = |2 - 7|= |a_2-a_3|∣一個2??一個1?∣+∣一個1??一個3?∣=∣2?5∣+∣5?7∣=5=∣2?7∣=∣一個2??一個3?∣,
- k = 2k=2:|a_2 - a_2|+ |a_2 - a_3|= |2 - 2|+ |2 - 7|= 5 = |2 - 7|= |a_2-a_3|∣一個2??一個2?∣+∣一個2??一個3?∣=∣2?2∣+∣2?7∣=5=∣2?7∣=∣一個2??一個3?∣,
- k = 3k=3:|a_2 - a_3|+ |a_3 - a_3|= |2 - 7|+ |7 - 7|= 5 = |2 - 7|= |a_2-a_3|∣一個2??一個3?∣+∣一個3??一個3?∣=∣2?7∣+∣7?7∣=5=∣2?7∣=∣一個2??一個3?∣.
代碼
#include<bits/stdc++.h> using namespace std;; int main() {int n; cin >> n;while(n--){ int m;cin >> m;int minv = 1e9+10;int maxv = -1;int mini ;int maxi ;for(int i = 0;i<m;++i){int a;cin>>a;if(a>maxv){maxi = i+1;maxv = a;}if(a<minv){mini = i+1;minv = a;}}cout<<mini<<" "<<maxi<<endl;}return 0; }講解?
?
本題關(guān)鍵是找到數(shù)組中的最大值和最小值的下標并輸出;
k可以為1~n中的任意值,要實現(xiàn)?|a_i - a_k|+ |a_k - a_j|= |a_i - a_j|這個式子
就要保證| a[i]-a[j] |值最大,即數(shù)組中的最大值和最小值的差值
B
題目
您將獲得以下列表n整數(shù)。您可以執(zhí)行以下操作:選擇一個元素x從列表中刪除x從列表中,并減去x從所有剩余元素。因此,在一次操作中,列表的長度正好減少1.
給定一個整數(shù)k(k>0),查找是否存在n-1操作,使得在應(yīng)用操作后,列表中唯一剩余的元素等于k.
輸入
輸入由多個測試用例組成。第一行包含單個整數(shù)tt?(1 \leq t \leq 10^41≤t≤104) ― 測試用例的數(shù)量。測試用例的說明如下。
每個測試用例的第一行包含兩個整數(shù)nn和kk?(2 \leq n \leq 2\cdot 10^52≤n≤2?105,1 \leq k \leq 10^91≤k≤109),分別是列表中的整數(shù)數(shù)和目標值。
每個測試用例的第二行包含nn列表的整數(shù)a_1、a_2、\ldots、a_n一個1?,一個2?,...,一個n??(-10^9 \leq a_i \leq 10^9?109≤一個我?≤109).
可以保證nn在所有測試用例中,不會大于2 \cdot 10^52?105.
輸出
對于每個測試用例,如果可以實現(xiàn),請打印?YESkk具有以下序列n-1n?1操作。否則,請打印?NO。
在任何情況下,您都可以打印每個字母(例如,"yes","YES","Yes","yeS","yEs"都將被識別為肯定的答案)。
示例 1
| 4 4 5 4 2 2 7 5 4 1 9 1 3 4 2 17 17 0 2 17 18 18 | YES NO YES NO |
注意
在第一個示例中,我們有列表{4,2,2,7},我們有目標k = 5k=5.實現(xiàn)它的一種方法如下:首先我們選擇第三個元素,獲取列表{2,0,5}.接下來我們選擇第一個元素,獲取列表{?2,3}.最后,我們選擇第一個元素,獲取列表\{5\}.
代碼
#include<iostream> #include<algorithm> #include<vector> using namespace std; int main() {int t;cin >> t;while (t--) {int n, a;cin >> n >> a;vector<int>v(n);for (int& x : v) cin >> x;bool ans = false;if (n == 1) ans = (v[0] == a);else {sort(v.begin(), v.end());int i = 0;int j = 0;while (j < n and i < n) {if (v[i] + abs(a) == v[j]) {ans = true;break;}else if (v[i] + abs(a) < v[j])++i;else ++j;}}cout << (ans ? "YES" : "NO") << endl;}return 0; }講解
看樣例1
咱就是說,如果你還看不懂的話,畫一個圖,一目了然,
?到最后,,只剩下{5}
坐標即使再發(fā)生變化,但坐標差值不會變,hh,可以得出本題求的是兩個坐標的最遠距離(doge?
也就是找題中的最大值和最小值,看它倆的差值是否為目標值即可
C
題目
您將獲得一個數(shù)組nn非負整數(shù)a_1、a_2、\ldots、a_n一個1?,一個2?,...,一個n?.您可以執(zhí)行以下操作:選擇一個整數(shù)x \geq 2x≥2并將數(shù)組的每個數(shù)字替換為余數(shù),同時將該數(shù)字除以xx,即,對于所有人1 \leq i \leq n1≤i≤n設(shè)置a_i一個我?自a_i \bmod x一個我?勇氣x.
確定是否可以通過應(yīng)用零次或多次操作來使數(shù)組的所有元素相等。
輸入
輸入由多個測試用例組成。第一行包含單個整數(shù)tt?(1 \leq t \leq 10^41≤t≤104) ― 測試用例的數(shù)量。測試用例的說明如下。
每個測試用例的第一行包含一個整數(shù)nn?(1 \leq n \leq 10^51≤n≤105) ― 數(shù)組的長度。
每個測試用例的第二行包含nn整數(shù)a_1、a_2、\ldots、a_n一個1?,一個2?,...,一個n??(0 \leq a_i \leq 10^90≤一個我?≤109) 其中a_i一個我?是我我-數(shù)組的第 1 個元素。
總和nn對于所有測試用例,最多是2 \cdot 10^52?105.
輸出
對于每個測試用例,如果可以通過應(yīng)用操作使列表中的所有元素相等,請打印一行帶有?YES?的行。否則,請打印?NO。
在任何情況下,您都可以打印每個字母(例如,"YES","yes","yEs"都將被識別為肯定的答案)。
示例 1
| 4 4 2 5 6 8 3 1 1 1 5 4 1 7 0 8 4 5 9 17 5 | YES YES NO YES |
注意
在第一個測試用例中,可以應(yīng)用該操作x = 3x=3獲取數(shù)組[2, 2, 0, 2],然后應(yīng)用該操作x = 2獲取[0, 0, 0, 0].
在第二個測試用例中,所有數(shù)字都已相等。
在第四個測試用例中,應(yīng)用操作x = 4結(jié)果在數(shù)組中[1, 1, 1, 1]
代碼
#include<bits/stdc++.h> using namespace std; int main(){int m;cin>>m;while(m--){int n;cin>>n;vector<int>v(n);for(int i = 0;i<n;i++) cin>>v[i];bool ans1 = 0,ans2 = 0;sort(v.begin(),v.end());for(int i = 0;i<n;i++){if(v[i] == 1){ans1 = 1;}if(i<n-1 &&(v[i]+1 == v[i+1])){ans2 = 1;}}if(ans1&&ans2){cout<<"NO"<<endl;}else{cout<<"YES"<<endl;}}return 0; }講解
這一題本質(zhì)就是求模(每個數(shù)都模一個大于等于2的數(shù)值),看模到最后,數(shù)組中的值是否相等,
當數(shù)組中出現(xiàn)了1,絕對不會出現(xiàn)最終結(jié)果相等的情況,因為1modx(x>=2)還是1
分成兩種情況,數(shù)組中包含1和不包含1的進行分析
此外數(shù)組中每兩個數(shù)只差應(yīng)該大于等于2,如果差值為1,那么x+1 mod x = 1;x mod x = 0
永遠不可能出現(xiàn)最后結(jié)果相同的情況!
經(jīng)分析,代碼如上
打表過樣例,暴力出奇跡
總結(jié)
以上是生活随笔為你收集整理的codeforces CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes) Editorial前三题讲解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言字符的引用是用AS,c中as的用法
- 下一篇: 计算机毕业设计Java校园共享单车管理系