1593D1 - All are Same(數學規律+數論+入門級)
阿新 • • 發佈:2021-10-15
2021.10.15補題
。
1593D1 - All are Same(源地址自⇔CF1593D1)
Problem
Example
3
6
1 5 3 1 1 5
8
-1 0 1 -1 0 1 -1 0
4
100 -1000 -1000 -1000
2
1
1100
tag:
⇔數學規律、⇔數論、⇔入門級(*1100)
題意:
對於一串數字,找到最大的 \(k\) ,使得每一位數字減去若干個 \(k\) 後變成一樣。
思路:
找到這串數字中最小的那個,然後計算所有數字與最小數字的差的最大公因數。
簡易證明:假設 \(a<b<c\) ,將 \(b\) 和 \(c\) 變成 \(a\) 分別需要減去 \(k_b\) 和 \(k_c\) ,則答案即為 \(gcd(k_b,k_c)\)
AC程式碼:
//A WIDA Project #include<bits/stdc++.h> using namespace std; const int MAX=1e6+5; int T,n,k,ans,a[MAX]; //=============================================================== int main(){ cin>>T; while(T-->0){ k=MAX9;ans=0; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; k=min(k,a[i]); } for(int i=1;i<=n;i++){ ans=__gcd(ans,a[i]-k); } if(ans==0) cout<<-1<<endl; else cout<<ans<<endl; } return 0; }
錯誤次數:1次
原因:未判斷 \(-1\) 的情況(即 \(k\) 可以取任何值的情況)。
文 / WIDA
2021.10.15成文
首發於WIDA個人部落格,僅供學習討論
更新日記:
2021.10.15 成文