51nod-2522 和为K的倍数
玄学tle
最近做了这道水题,发现我把统计数量的变量ans设为全局变量,就会TLE。
设为局部变量才能过,这是什么意思?????难搞哦
下两组代码只有ans 初始化位置不同,一个t,一个ac
①:t
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e4 + 10;
int n, k;
int ans = 0;
int a[N];
int sum[N];
int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}
scanf("%d", &k);
for(int i = 1; i <= n; i++){
sum[i] = (sum[i - 1] + a[i]) % k;
}
// int ans = 0;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n - i + 1; j++){
if((sum[j+i-1] - sum[j-1]) % k == 0){
ans++;
}
}
}
printf("%d\n", ans);
return 0;
}
②ac
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e4 + 10;
int n, k;
// int ans = 0;
int a[N];
int sum[N];
int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}
scanf("%d", &k);
for(int i = 1; i <= n; i++){
sum[i] = (sum[i - 1] + a[i]) % k;
}
int ans = 0;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n - i + 1; j++){
if((sum[j+i-1] - sum[j-1]) % k == 0){
ans++;
}
}
}
printf("%d\n", ans);
return 0;
}