Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
38373 hi_hi 【S】T1 C++ 输出超限 0 42 MS 7296 KB 2034 2025-10-03 16:07:05

Tests(0/10):


#include<bits/stdc++.h> using namespace std; long long n,a[100005],md=1000000007,top[100005],sum,ji[100005],ans,jj[35]; vector<long long>poi[100005]; inline long long qw(long long d,long long z){ if(z<0)return 1; d=d%md; if(z==0)return 1; long long _=qw(d,z/2); _=_%md; _=_*_; _%=md; if(z%2==1)_=((_*d)%md); _=_%md; return (_%md); } int main(){ scanf("%lld",&n); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } for(int i=2;i<=n;i++){ long long _; scanf("%lld",&_); ji[_]++; poi[_].push_back(i); } for(int i=1;i<=n;i++){ memset(jj,0,sizeof(jj)); for(int j=0;j<=34;j++){ if(((a[i]>>j)&1)==1)jj[j]++; } for(int j=0;j<poi[i].size();j++){ for(int k=0;k<=34;k++){ if(((a[poi[i][j]]>>k)&1)==1)jj[k]++; } } for(int j=0;j<5;j++){ printf("%lld ",jj[j]); } printf("\n"); if(i!=1){ for(int j=0;j<=34;j++){ if(jj[j]==0)continue; long long _=qw(2,1+poi[i].size()-jj[j])*qw(2,jj[j]-1); _--; if(jj[j]!=1)_-=qw(2,1+poi[i].size()-jj[j]); _%=md; _=_*qw(2,n-2-poi[i].size()); _%=md; _=_*qw(2,j); _%=md; ans+=max(_,0ll); ans%=md; } } else{ for(int j=0;j<=34;j++){ if(jj[j]==0)continue; long long _=qw(2,poi[i].size()-jj[j])*qw(2,jj[j]-1); //_--; _%=md; _=_*qw(2,n-1-poi[i].size()); _%=md; _=_*qw(2,j); _%=md; ans+=_; ans%=md; } } printf("%lld\n",ans); } }


测评信息: