NC20706. Phrase String
描述
输入描述
两个整数v, k。保证v,k均为偶数!
输出描述
一个整数,表示n对取模的结果。
示例1
输入:
6 4
输出:
45
说明:
样例的构造方法为:101101示例2
输入:
2 4
输出:
15
说明:
最优的构造方法为:1111C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 580K, 提交时间: 2020-08-19 10:44:47
#include<bits/stdc++.h> using namespace std; const int N=100010,mo=1000000007; int A[N],v,k,i,Ans=0; int main(){ cin>>v>>k; v=max(v,k); k>>=1; k--; A[1]=A[v]=1; for(i=1;i<=k;i++) A[v/2-i+1]=A[v/2+i]=1; for(i=1;i<=v;i++) Ans=(Ans*2+A[i])%mo; cout<<Ans; return 0; }//
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 588K, 提交时间: 2020-08-18 20:30:27
#include<bits/stdc++.h> using namespace std; const int N=100010,mo=1000000007; int A[N],v,k,i,Ans=0; int main(){ cin>>v>>k; v=max(v,k); k>>=1; k--; A[1]=A[v]=1; for(i=1;i<=k;i++) A[v/2-i+1]=A[v/2+i]=1; for(i=1;i<=v;i++) Ans=(Ans*2+A[i])%mo; cout<<Ans; return 0; }
pypy3 解法, 执行用时: 155ms, 内存消耗: 25848K, 提交时间: 2022-04-16 10:19:17
v,k = map(int,input().split()) if k<=v: v,k=v//2,k//2 s = '1'+'0'*(v-k)+'1'*(k-1) s = '0b'+s+s[::-1] n= int(s,2)%(10**9+7) print(n) else: s = '0b'+'1'*k n= int(s,2)%(10**9+7) print(n)
Python3 解法, 执行用时: 42ms, 内存消耗: 4656K, 提交时间: 2022-04-17 18:32:31
v,k = input().split(' ') v = int(v) k = int(k) print(int('1'+'0'*((v-k)//2)+'1'*(k-2)+'0'*((v-k)//2)+'1',2)%1000000007)