传送门
文章目录
- 题意:
- 思路:
题意:
给定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;
}
/**/