Codeforces Round #624 (Div. 3) D. Three Integers 数论
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Codeforces Round #624 (Div. 3) D. Three Integers 数论
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                傳送門
 
文章目錄
- 題意:
- 思路:
題意:
給定A,B,CA,B,CA,B,C,找到一個三元組(a,b,c)(a,b,c)(a,b,c),使得aaa是bbb的因子,bbb是ccc的因子,且abs(A?a)+abs(B?b)+abs(C?c)abs(A-a)+abs(B-b)+abs(C-c)abs(A?a)+abs(B?b)+abs(C?c)最小。
 A,B,C≤1e4A,B,C\le 1e4A,B,C≤1e4
思路:
注意到aaa是bbb的因子,bbb是ccc的因子,所以考慮枚舉aaa,那么枚舉bbb就是k?ak*ak?a,枚舉ccc就是t?bt*bt?b,枚舉上限為2?c2*c2?c,復雜度O(nlog2n)O(nlog^2n)O(nlog2n)。
 當然還可以枚舉bbb,之后枚舉bbb的因子,找到離aaa最近的那個,讓后再枚舉bbb的倍數,找到離ccc最近的那個即可。
O(nlogn)O(nlog^n)O(nlogn)
// Problem: D. Three Integers // Contest: Codeforces - Codeforces Round #624 (Div. 3) // URL: https://codeforces.com/contest/1311/problem/D // Memory Limit: 256 MB // Time Limit: 2000 ms // // Powered by CP Editor (https://cpeditor.org)#pragma GCC optimize(2) #include<cstdio> #include<iostream> #include<string> #include<cstring> #include<map> #include<cmath> #include<cctype> #include<vector> #include<set> #include<queue> #include<algorithm> #include<sstream> #define X first #define Y second #define L (u<<1) #define R (u<<1|1) #define Mid (tr[u].l+tr[u].r>>1) #define Len(u) (tr[u].r-tr[u].l+1) #define pb push_back #define mk make_pair using namespace std;typedef long long LL; typedef pair<int,int> PII;const int N=200010,mod=1e9+7,INF=0x3f3f3f3f; const double eps=1e-6;int a,b,c;int main() { // ios::sync_with_stdio(false); // cin.tie(0);int _; scanf("%d",&_);while(_--){scanf("%d%d%d",&a,&b,&c);int a1,a2,a3,ans=INF;for(int i=1;i<=2*c;i++){for(int j=i;j<=2*c;j+=i){for(int k=j;k<=2*c;k+=j){int dis=abs(i-a)+abs(j-b)+abs(k-c);if(ans>dis) ans=dis,a1=i,a2=j,a3=k;}}}printf("%d\n%d %d %d\n",ans,a1,a2,a3);} return 0; } /**/O(nlogn)O(nlogn)O(nlogn)
// Problem: D. Three Integers // Contest: Codeforces - Codeforces Round #624 (Div. 3) // URL: https://codeforces.com/contest/1311/problem/D // Memory Limit: 256 MB // Time Limit: 2000 ms // // Powered by CP Editor (https://cpeditor.org)#pragma GCC optimize(2) #include<cstdio> #include<iostream> #include<string> #include<cstring> #include<map> #include<cmath> #include<cctype> #include<vector> #include<set> #include<queue> #include<algorithm> #include<sstream> #define X first #define Y second #define L (u<<1) #define R (u<<1|1) #define Mid (tr[u].l+tr[u].r>>1) #define Len(u) (tr[u].r-tr[u].l+1) #define pb push_back #define mk make_pair using namespace std;typedef long long LL; typedef pair<int,int> PII;const int N=200010,mod=1e9+7,INF=0x3f3f3f3f; const double eps=1e-6;int a,b,c; vector<int>d[N];int main() { // ios::sync_with_stdio(false); // cin.tie(0);for(int i=1;i<N;i++)for(int j=i;j<N;j+=i)d[j].pb(i);int _; scanf("%d",&_);while(_--){scanf("%d%d%d",&a,&b,&c);int a1,a2,a3,ans=INF;for(int i=1;i<=2*c;i++){int x,y,z,cnt=0,mi=INF;for(auto xx:d[i]) if(abs(xx-a)<mi) mi=abs(xx-a),x=xx;cnt+=mi; mi=INF;for(int j=i;j<=2*c;j+=i) if(abs(j-c)<mi) mi=abs(j-c),y=j;cnt+=mi;cnt+=abs(i-b);if(cnt<ans) ans=cnt,a1=x,a2=i,a3=y;}printf("%d\n%d %d %d\n",ans,a1,a2,a3);} return 0; } /**/總結
以上是生活随笔為你收集整理的Codeforces Round #624 (Div. 3) D. Three Integers 数论的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        