Three Integers(暴力,行走在TLE的边缘)

2023-10-08 04:38

本文主要是介绍Three Integers(暴力,行走在TLE的边缘),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

VJ链接

题意:

对三个数a,b,c,进行若干次操作,每次操作只能对其中一个数进行+1或-1。同一个数可进行多次操作。问使得b能整除a且c能整除b的最少操作次数。(1≤a≤b≤c≤10000)

思路:

由于数据范围较小,且a和c都可以用b求得,可以暴力枚举b的所有情况,然后记录每种情况需要进行操作的次数。保留最小的一组即可。就是假设b已知的情况下去推a和c。
具体做法:

1.a用b来表示以及对a操作的次数实现:

b既定时,由于a%b==0,则a必然是b的因数,枚举b的所有因数,其中与a差值最小的那个因数即为最终的a,它们的差值就是需要对题中输入的a的操作次数。
注意枚举b的因数时,范围取1~sqrt(b),每次计算两个数

2.c用b表示以及对c的操作次数实现:

c=k*b(k=1,2,3,4…), 求与c最接近的b的整数倍即可,略

3 关于b的枚举范围:1~c+r ,r是个大概值,用于容错,实测200即可

但是r一定要有,为什么?我也不知道我为什么wa了六次,有明白的大佬希望能艾特我,不胜感激。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int t,q,w,e;
int ab(int x) //绝对值
{return x=x>0?x:-1*x;
}
int sea(int x,int sp) //寻找与sp最接近的,x的因数值
{int mn=inf,s,j,r;for(int i=1; i<=sqrt(x); i++)if(x%i==0){j=x/i;  //i,j,一次算俩r=ab(i-sp);if(mn>r){mn=r;s=i;}r=ab(j-sp);if(mn>r){mn=r;s=j;}}return s;
}
int main()
{scanf("%d",&t);while(t--){scanf("%d%d%d",&q,&w,&e);int X,Y,Z,minn=inf,y,y1;  //X,Y,Z最终保留的abc值,minn:最少操作次数for(int k=1; k<=e+100; k++) //b的范围,一定要扩充一下{int ans=0,a=q,b=w,c=e;//ans:每次的操做次数和ans+=ab(b-k);//b需要的操作数b=k;if(c%k!=0)//省时间{y=c/k*k;ans+=min(c-y,y+k-c);c=(c-y)>(y+k-c)?y+k:y;//b求c}if(b%a!=0){y1=sea(k,a);//b求aans+=ab(y1-a);a=y1;}if(minn>ans&&c>=b&&b>=a)//因为b从1开始,但b<a没有意义{minn=ans;X=a,Y=b,Z=c;}}printf("%d\n%d %d %d\n",minn,X,Y,Z);}return 0;
}

这篇关于Three Integers(暴力,行走在TLE的边缘)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/162732

相关文章

poj 2175 最小费用最大流TLE

题意: 一条街上有n个大楼,坐标为xi,yi,bi个人在里面工作。 然后防空洞的坐标为pj,qj,可以容纳cj个人。 从大楼i中的人到防空洞j去避难所需的时间为 abs(xi - pi) + (yi - qi) + 1。 现在设计了一个避难计划,指定从大楼i到防空洞j避难的人数 eij。 判断如果按照原计划进行,所有人避难所用的时间总和是不是最小的。 若是,输出“OPETIMAL",若

计蒜客 Half-consecutive Numbers 暴力打表找规律

The numbers 11, 33, 66, 1010, 1515, 2121, 2828, 3636, 4545 and t_i=\frac{1}{2}i(i+1)t​i​​=​2​​1​​i(i+1), are called half-consecutive. For given NN, find the smallest rr which is no smaller than NN

Three 渲染器(二)

WebGL1Renderer 构造函数 WebGL1Renderer( parameters : Object ) Creates a new WebGL1Renderer. 属性 See the base WebGLRenderer class for common properties. 方法 See the base WebGLRenderer class for common

2024年AI芯片峰会——边缘端侧AI芯片专场

概述 正文 存算一体,解锁大模型的边端侧潜力——信晓旭 当下AI芯片的亟需解决的问题 解决内存墙问题的路径 产品 面向大模型的国产工艺边缘AI芯片创新与展望——李爱军 端侧AI应用“芯”机遇NPU加速终端算力升级——杨磊 边缘端的大模型参数量基本小于100B AI OS:AI接口直接调用AI模型完成任务 具身智能的大脑芯片 大模

10125-Sumsets【暴力】

利用n^2的时间枚举所有a[i] + a[j] 利用n^2的时间枚举所有a[i] - a[j] 之后利用n^2时间一个一个找a[i] - a[j]的值是否存在于a[i] + a[j]中 找的时候需要二分查找 另外一点就是注意long long的范围以及四个数是集合内不同的四个元素 15222638 10125 Sumsets Accepted C++ 0.449 2015-03-

10730-Antiarithmetic?【暴力枚举】

水题 求一个序列是否存在3个数按顺序构成等差数列 直接枚举等差数列的差值 时间复杂度降到 n * n / 3 开pos数组记录每个值得为之 楷vis数组记录目前i是否出现过 强行AC 15221397 10730 Antiarithmetic? Accepted C++ 0.035 2015-03-26 12:09:56 #include<cstdio>#include

外部中断的边缘触发和电平触发

MCS-51单片机中的边缘触发是指当输入引脚电平由高到低发生跳变时,才引起中断。而电平触发是指只要外部引脚为低电平就引起中断。         在电平触发方式下,当外部引脚的低电平在中断服务返回前没有被拉高时(即撤除中断请求状态),会引起反复的不需要的中断,造成程序执行的错误。这类中断方式下,需要在中断服务程序中设置指令,清除外部中断的低电平状态,使之变为高电平。

leetcode#628. Maximum Product of Three Numbers

题目 Given an integer array, find three numbers whose product is maximum and output the maximum product. Example 1: Input: [1,2,3]Output: 6 Example 2: Input: [1,2,3,4]Output: 24 Note: The lengt

从零开始学cv-14:图像边缘检测

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、图像边缘是什么?二、Sobel 算子三、Scharr 算子四、Prewitt算子五、Canny算子 前言 边缘检测是OpenCV中的一个重要组成部分,它用于识别图像中亮度变化显著的点,即边缘。通过边缘检测,我们可以从图像中提取出重要的特征,为后续的图像分析、形状识别和物体跟踪等任务奠定

HLJUOJ1125(暴力三点一线)

两点确定一条直线 Time Limit: 1 Sec   Memory Limit: 128 MB Submit: 19   Solved: 11 [ Submit][ Status][ Web Board] Description  给一个15000 * 15000 的区域, 坐标都是整数. 其中有N个点,N <= 770.问总共有多少个3点共线的组合.并按升序(点的ID)输出