1.组合数学分析做法不太会
2.考虑暴力求n = 1 , 2 ,3 , 4 , 5 的结果为:1,8 , 40,160,560
3.将序列丢入oeis (存储所有数列通项公式的数据库), 可以得到结果:Cn+23∗2n−1
4.第一次接触取模操作的uu可以看看这篇文章
mod = 10**9 + 7
def ksm (a, b, mod):
res = 1
while b:
if b & 1:
res = res * a % mod
a = a * a % mod
b >>= 1
return res
t = int(input())
for _ in range(t):
n = int(input())
fz = n * (n + 1) % mod * (n + 2) % mod
fm = 6
inv_fm = ksm(fm, mod - 2, mod)
comb = fz * inv_fm % mod
p2 = ksm(2, n - 1, mod)
print(comb * p2 % mod)
import java.util.Scanner;
public class Main {
static final int MOD = 1000000007;
public static long ksm(long a, long b, long mod) {
long res = 1;
while (b > 0) {
if ((b & 1) == 1) {
res = res * a % mod;
}
a = a * a % mod;
b >>= 1;
}
return res;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
for (int i = 0; i < t; i++) {
int n = scanner.nextInt();
long fz = (long) n * (n + 1) % MOD * (n + 2) % MOD;
long fm = 6;
long inv_fm = ksm(fm, MOD - 2, MOD);
long comb = fz * inv_fm % MOD;
long p2 = ksm(2, n - 1, MOD);
System.out.println(comb * p2 % MOD);
}
scanner.close();
}
}
#include <iostream>
using namespace std;
const int MOD = 1000000007;
long long ksm(long long a, long long b, long long mod) {
long long res = 1;
while (b > 0) {
if (b & 1) {
res = res * a % mod;
}
a = a * a % mod;
b >>= 1;
}
return res;
}
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
long long fz = (1LL * n * (n + 1) % MOD * (n + 2) % MOD);
long long fm = 6;
long long inv_fm = ksm(fm, MOD - 2, MOD);
long long comb = fz * inv_fm % MOD;
long long p2 = ksm(2, n - 1, MOD);
cout << (comb * p2 % MOD) << endl;
}
return 0;
}
OJ会员可以通过点击题目上方《已通过》查看其他通过代码来学习。
对于一个长度为k且只包含字符0和1的字符串s1s2...sk,定义其权值为:
每次操作可以选择一个下标i(1≤i≤k),将[1,i]的字符全部取反(0变1,1变0);
将字符串变为全1需要的最少操作次数。
例如字符串00110,
第一次操作选择i=5,字符串变成11001;
第二次操作选择i=4,字符串变成00111;
第三次操作选择i=2,字符串变成11111;
至少需要3次操作,字符串权值为3。
定义其重量为:该字符串的全部非空子串的权值总和。
子串是指从原字符串中,连续的选择一段字符组成的新字符串。
现在,给出一个整数n,问:全部长度为n的0−1的字符串的重量总和是多少?
每个测试文件均包含多组测试数据。
第一行输入一个整数T(1≤T≤103)代表数据组数,每组测试数据描述如下:
每行输入一个整数n(1≤n≤106)表示给定的整数。
除此之外,保证所有的n之和不超过107。
对于每一组测试数据,在一行上输出一个整数,代表重量总和。
由于答案可能很大,请将答案对(109+7)取模后输出。
输入
2
2
1
输出
8
1
说明
对于第一组测试数据,全部0−1子串有00,01,10,11