关于T1
  • 板块灌水区
  • 楼主xfzf_shentao
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/3/27 12:19
  • 上次更新2023/11/5 01:32:27
查看原帖
关于T1
304551
xfzf_shentao楼主2021/3/27 12:19
#include<bits/stdc++.h>
using namespace std;
char s[1000100];
int n,y,i,j,T,a[1000100],b[1000100];
long long ans,x,dp[1000100],k;
char ch;
void read(long long  &x){
	x=0;
	while (ch<'0'||ch>'9') ch=getchar();
	while (ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
}
int main(){
	freopen("angry.in","r",stdin);
	freopen("angry.out","w",stdout); 
	scanf("%s",s);
	n=0;y=1;
	for(i=strlen(s)-1;i>=0;i--)
		n+=(s[i]-48)*y,y*=2;
	a[1]=0;T=1;
	while(T<n){
		for(i=1;i<=T;i++)
			b[i]=1-a[i];
		for(i=T+1;i<=T*2;i++)
			a[i]=b[i-T];
		T*=2;
	}
	read(k);
	for(i=1;i<=k;i++) read(dp[i]);
	for(i=0;i<n;i++)
		if(a[i+1]==1){
			x=1;
			for(j=1;j<=k;j++)
				ans=(ans%1000000007+dp[j]%1000000007*x%1000000007)%1000000007,x=(x%1000000007*i%1000000007)%1000000007;
		}
	printf("%lld\n",ans);
	return 0;
}```
这样能对多少呀
2021/3/27 12:19
加载中...