# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
22760 | 현우야 이거 플로우야 (#40) | Unifying Values (KRIII5_UV) | C++11 | 446 ms | 1312 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <stdio.h>
typedef long long lli;
const lli mod=1e9+7;
int n;
lli sum[10001];
int chk[10001];
lli cnt[10001];
lli pow(lli a, lli p) {
lli res=1;
while(p) {
if(p&1) res=(res*a)%mod;
a=(a*a)%mod;
p>>=1;
}
return res;
}
int main() {
lli zsum=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld",sum+i);
sum[i]+=sum[i-1];
if(sum[i]==0) ++zsum;
}
--zsum;
lli res=0;
for(int i=1;i<n;i++) {
if(sum[i]==0) {
--zsum;
if(sum[n]!=0) continue;
res=(res+pow(2,zsum))%mod;
}
else {
if((sum[n]>0&&sum[i]>0||sum[n]<0&&sum[i]<0)&&sum[n]%sum[i]!=0)
continue;
lli k=sum[n]/sum[i];
if(k==1||k>n) continue;
cnt[1]=1; chk[1]=i;
for(int j=i+1;j<=n;j++) {
if((sum[j]>0&&sum[i]>0||sum[j]<0&&sum[i]<0)&&sum[j]%sum[i]==0) {
lli kk=sum[j]/sum[i];
if(kk>=k||kk==1) continue;
if(chk[kk-1]!=i) continue;
if(chk[kk]!=i) {
chk[kk]=i;
cnt[kk]=0;
}
cnt[kk]=(cnt[kk]+cnt[kk-1])%mod;
}
}
if(chk[k-1]!=i) continue;
res=(res+cnt[k-1])%mod;
}
}
printf("%lld\n",res);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |