谁来解释一下
查看原帖
谁来解释一下
1492018
noiiloveyou楼主2025/6/12 20:52

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?不会吧

2025/6/12 20:52
加载中...