100pts:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=100005;
const ll p=12345678910ll;
bitset<maxn> s;
int n;
/*ll mypow(ll a,ll q){
ll ans=1;
while(q){
if(q&1){
ans*=a;
ans%=p;
}
q>>=1;
a*=a;
a%=p;
}
return ans;
}*/
ll mypow(ll a,ll q){
ll ans=1;
for(int i=0;i<q;++i){
ans*=a;
ans%=p;
}
return ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
bool a;
cin>>n;
for(int i=0;i<n;++i){
cin>>a;
s[i]=a;
}
ll ans=0,c=0;
for(int i=0;i<n;++i){
if(!s[i]){
++c;
}
else{
--c;
if(!s[i-1]){
ans+=mypow(2ll,c);
ans%=p;
}
}
}
cout<<ans;
return 0;
}
60pts:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=100005;
const ll p=12345678910;
bitset<maxn> s;
int n;
ll mypow(ll a,ll q){
ll ans=1;
while(q){
if(q&1){
ans*=a;
ans%=p;
}
q/=2;
a*=a;
a%=p;
}
return ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
bool a;
cin>>n;
for(int i=0;i<n;++i){
cin>>a;
s[i]=a;
}
ll ans=0,c=0;
for(int i=0;i<n;++i){
if(!s[i]){
++c;
}
else{
--c;
if(!s[i-1]){
ans+=mypow(2ll,c);
ans%=p;
}
}
}
cout<<ans;
return 0;
}
第二个只是用了快速幂,为什么就错了?会爆 long long?不会吧