Submission #22298

#TimeUsernameProblemLanguageResultExecution timeMemory
22298↓우리보다잘하는팀 (#40)Unifying Values (KRIII5_UV)C++14
7 / 7
6 ms1372 KiB
#include<cstdio>
#include<set>
int n;
long long int x[10100];
long long int s[10100];
std::set<long long int>dvs;
int ans;
const int mod = 1000000007;
int dp[10100];
int main() {
	scanf("%d", &n);
	s[0] = 0;
	for (int i = 0; i < n; i++) {
		scanf("%lld", &x[i]);
		s[i + 1] = s[i] + x[i];
	}
	if (s[n] == 0) {
		ans = 1;
		for (int i = 1; i < n; i++) {
			if (s[i] == 0) {
				ans *= 2;
				ans %= mod;
			}
		}
		ans--;
	}
	else if (s[n] < 0) {
		for (int i = 0; i <= n; i++) {
			x[i] = -x[i];
			s[i] = -s[i];
		}
	}
	if (s[n] > 0) {
		for (int i = 0; i <= n; i++) {
			if (s[i] > 0 && s[i] < s[n] && s[n] % s[i] == 0 && s[n] / s[i] <= n) {
				dvs.insert(s[i]);
			}
		}
		for (auto &d : dvs) {
			for (int i = 0; i <= s[n] / d; i++) {
				dp[i] = 0;
			}
			dp[0] = 1;
			for (int i = 1; i < n; i++) {
				if (s[i] > 0 && s[i] % d == 0 && s[i] < s[n]) {
					int lv = s[i] / d;
					dp[lv] += dp[lv - 1];
					dp[lv] %= mod;
				}
			}
			ans += dp[s[n] / d - 1];
			ans %= mod;
		}
	}
	printf("%d", ans);
}

Compilation message (stderr)

UV.cpp: In function 'int main()':
UV.cpp:11:17: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &n);
                 ^
UV.cpp:14:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld", &x[i]);
                       ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...