查找不等式为真的次数时出现问题
Problem finding the number of times the inequality is true
我有一个数学问题。该程序由 5 个输入变量(p,q,r,L,R(和 1 个输出组成。
问题:一个人有N个巧克力。他希望分享给3个人。第一个人会得到 N/p 巧克力(如果分数是 5.00,他给这个人 5,但如果分数是 5.01 左右(你必须 ceil(L/p( 到更高的数字(。他给人#2,给人#3的L/r巧克力。如果数字N从[L,R]变化,他有多少次可以成功分享巧克力,这样它就不会超过他的库存。必须满足的条件是
(ceil(L/p( + ceil(L/q( + ceil(L/r(( <= N
关键是要尽快计算它。我试图找到满足条件的第一个成功时间,然后将其乘以它包含在 R 中的时间,但我找不到在 ~0.5 秒内做到这一点的方法。
一个例子(正确的一个(: 输入: 2 3 7 9 14 输出:2
工作版本(但太懒了(是: 工作版本是:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int p,q,r;
//unsigned long long int L,R;
unsigned long long int L,R;
int i=0;
cin >> p;
cin >> q;
cin >> r;
cin >> L;
cin >> R;
for (; L<=R; L++) {
if(( ceil((long double)L/p)+ ceil((long double)L/q ) + ceil((long double)L/r) ) <= L) {
i++;
}
}
cout << i;
}
输入限制为: 1 <= a,b,c <= 10 和 1 <= X <= Y <= 10^18
在我看来,你应该利用这样一个事实,即递增L
,你也递增除法的余数L/p
、L/q
和L/r
所以我想你只能计算三个除法,避免循环内的除法。
我的意思是。。。而不是
for (; L<=R; L++) {
if(( ceil((long double)L/p)+ ceil((long double)L/q ) + ceil((long double)L/r) ) <= L) {
i++;
}
}
你可以写(注意:代码只用 2、3、7、9、14 测试(
auto dp = std::lldiv(L, p);
auto dq = std::lldiv(L, q);
auto dr = std::lldiv(L, r);
auto rp = dp.rem;
auto rq = dq.rem;
auto rr = dr.rem;
auto sum = dp.quot + (rp ? 1ll : 0ll)
+ dq.quot + (rq ? 1ll : 0ll)
+ dr.quot + (rr ? 1ll : 0ll);
while ( L <= R )
{
if ( sum <= L++ )
++i ;
if ( 1ll == ++rp )
++sum;
else if ( p == rp )
rp = 0ll;
if ( 1ll == ++rq )
++sum;
else if ( q == rq )
rq = 0ll;
if ( 1ll == ++rr )
++sum;
else if ( r == rr )
rr = 0ll;
}
而且,也许,您可以简化一点if
-else if
部分。
题外话:我对所有变量都使用了long long
:p
、q
、r
、L
、R
和i
。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 查找不等式为真的次数时出现问题