Submission #22654

#TimeUsernameProblemLanguageResultExecution timeMemory
22654크리콘 B번 문제는 그리디로 풀려요 (#40)Unifying Values (KRIII5_UV)C++98
7 / 7
226 ms24588 KiB
#include<stdio.h> #include<vector> #include<map> #define ab(a) ((a)<0?-(a):(a)) using namespace std; typedef long long lld; const lld mod = 1000000007; int N, scn; lld ba[10101], sum[10101], dyt[101][10101], dcn, dap; map<lld, int> dix, six; vector<int> sixs[10101]; lld make_dy(lld sm, int p){ int ix = dix[sm]; if(ix>0) return dyt[ix][p]; dix[sm] = ++dcn; dyt[dcn][N+1]=1; for(int i=N; i>=p; i--){ int idx = six[sum[i-1] + sm]; if(idx == 0) continue; for(int j=0; j<sixs[idx].size(); j++){ int k = sixs[idx][j]; if(k < i)break; dyt[dcn][i] += dyt[dcn][k+1]; } dyt[dcn][i] %= mod; } return dyt[dcn][p]; } int main(){ scanf("%d", &N); for(int i=1; i<=N; i++){ scanf("%lld", &ba[i]), sum[i]=sum[i-1]+ba[i]; six[sum[i]] = i; } for(int i=N; i>=1; i--){ sixs[six[sum[i]]].push_back(i); } for(int i=1; i<=N; i++){ if(sum[N] == 0){ if(sum[i] == 0) dap += make_dy(0, i+1); } else{ if(sum[i] == 0)continue; if(ab(sum[N]) % ab(sum[i]))continue; if(sum[N] / sum[i] <= 0)continue; dap += make_dy(sum[i], i+1); } } printf("%lld", (dap+mod-1)%mod); return 0; }

Compilation message (stderr)

UV.cpp: In function 'lld make_dy(lld, int)':
UV.cpp:24:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=0; j<sixs[idx].size(); j++){
                 ^
UV.cpp: In function 'int main()':
UV.cpp:35:17: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &N);
                 ^
UV.cpp:37:47: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld", &ba[i]), sum[i]=sum[i-1]+ba[i];
                                               ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...