Submission #22517

#TimeUsernameProblemLanguageResultExecution timeMemory
22517퍼플달고싶다 (#40)Unifying Values (KRIII5_UV)C++14
7 / 7
466 ms2956 KiB
#include <iostream>
#include <cstdio>
#include <string>
#include <sstream>
#include <algorithm>
#include <set>
#include <numeric>
#include <cmath>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <queue>
#include <numeric>
#include <iomanip>
#define ll long long
using namespace std;
long long sum[10002];
long long arr[10002];
int start[10002];
const long long mod=1e9+7;
long long dp[10002];
vector<long long > valid;
int n;
long long go(int idx,long long sm){
    if(dp[idx]!=-1)return dp[idx];
    if(idx==n+1)return dp[idx]=1;
    dp[idx]=0;
    for(int i=idx;i<=n;i++){
        if(sum[i]-sum[idx-1]==sm){
            dp[idx]=(dp[idx]+go(i+1,sm));
            dp[idx]%=mod;
        }
    }
    return dp[idx];
}
long long fastPow(int k){
    if(k<0)return 0;
    long long ret=1;
    long long two=2;
    for(int i=0;i<20;i++){
        if(k&(1<<i)){
            ret=(ret*two)%mod;
            k-=(1<<i);
        }
        two=(two*two)%mod;
    }
    return ret;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>arr[i];
        sum[i]=sum[i-1]+arr[i];
    }
    for(int i=1;i<=n;i++){
        if(sum[i]!=0 && sum[n]%sum[i]==0){
            valid.push_back(sum[i]);
        }
    }
    sort(valid.begin(),valid.end());
    valid.erase(unique(valid.begin(),valid.end()),valid.end());
    //sum[n]=0인경우 예외처리
    if(sum[n]==0)valid.clear(),valid.push_back(0);
    for(int i=0;i<valid.size();i++){
        for(int j=1;j<n;j++){
            if(sum[j]==valid[i]){
                start[i]=j;
                break;
            }
        }
    }
    long long ans=0;
    for(int i=0;i<valid.size();i++){
        memset(dp,-1,sizeof(dp));
        long long num=valid[i];
        ans=(ans+go(1,valid[i]))%mod;
    }
    cout<<(ans+mod-1)%mod;
    return 0;
}

Compilation message (stderr)

UV.cpp: In function 'int main()':
UV.cpp:68:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<valid.size();i++){
                  ^
UV.cpp:77:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<valid.size();i++){
                  ^
UV.cpp:79:19: warning: unused variable 'num' [-Wunused-variable]
         long long num=valid[i];
                   ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...