从N个城市列表中选择城市/城市的方式数量

时间:2016-11-05 06:21:09

标签: c++ algorithm performance subset

有一个N个城市的列表,编号从1 to N开始。

任务是选择从列表中选择城市/城市的方式。

必须至少选择一个城市。由于答案可能很大,请以10^9+7

模式打印答案
Examples
Input               Output
2 (test cases)
2                   3
1                   1
  

对于测试用例1:选择城市的唯一方法是1,2,1 2   因此答案是3。

     

对于测试案例2:选择城市的唯一方法是1因此   答案是1。

我尝试了以下方式(C语言):

#include<stdio.h>
#include<math.h>
const long int REM = 1000000000+7;
int main()
{
    int t; scanf("%d",&t); while(t--) {
        long long int n; scanf("%lld",&n);
        long long int res=1;
        for(long long int i=0;i<n;i++) {
            res<<=1;
            res%=(REM);
        }
        printf("%lld\n",res-1);
    }
    return 0;
}

这给了我超时限制。请建议我更好performance algorithm

谢谢

2 个答案:

答案 0 :(得分:3)

答案是所有可能子集的数量(空集除外).TosString()

由于2^n - 1非常大,这就是问题要求进行模块化操作的原因,您必须执行Modular Exponentiation来计算2^n

2^n

答案 1 :(得分:2)

您可以使用二进制求幂算法以对数时间解决每个测试用例。