微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何摆脱“超过时间限制”

如何解决如何摆脱“超过时间限制”

我尝试解决在线网站中的一些问题。我已经用简单的C ++解决一个问题,它工作得很好,但是有时会抛出“ 时间限制超出错误。如何摆脱呢?

这是我解决的问题

有两个整数A和B。您需要计算A和B之间的所有自然数(包括两者)中的按位与。

这是我的代码

 #include<iostream>
using namespace std;
int main()
{
    int t,a,b;
    long ans;
    cin>>t;
    while(t--)
    {
        cin>>a>>b;
        ans=a;
        for(int i=a+1; i<=b; i++)
        {
            ans=ans&i;
        }
        cout<<ans<<endl;
    }
}

解决方法

如果您有两个数字X和Y,则它们由有限的位集表示:

X = Bx(1),...,Bx(n)

Y = By(1),By(n)

两者之间的按位与可计算为

X ^ Y = (Bx(1) ^ By(1)),(Bx(n) ^ By(n))

A B A ^ B

0 0 0

0 1 0

1 0 0

1 1 1

我们注意到:

  • 所有位都可以单独计算,我们方程式和位一样多
  • 在一系列逻辑语句(其中AND是运算符)中,当且仅当任何一项为0时,结果为0

因此,如果任何数字成对,则最后一位为0。否则,最后一位为1。如果任何数字的倒数第二位为0,则该位的结果为0。否则将会是1。

通常,基于Dirichlet提出的pigeonhole principle,如果给定位具有足够的连续(元素),则该位的结果将为0。例如,对于最后一位有两个变体,因此,如果连续集中至少有两个数字,那么最后一位将为0。如果我们取下一位,则您有四个变体:00、01、10和11因此,如果连续集中至少有3个数字,则该位为0;对于下一位,则有8个变体:000、001、010、011、100、101、110、111。您的连续集合中至少有5个数字,那么该位为0。

现在,由于我们有一个简单的规则来确定是否有很多项目,因此大多数位将以超出我上面描述的规则的变化数的位数结束。对于这些位,您可以检查第一个和最后一个数字。如果它们的那个位具有相同的值,那么该值将是结果,是0还是1。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?