藍橋杯k倍空間的題目。以下是我的代碼:(一直得分都是28,是哪里出了問題?)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N,k,a[100001],i,s[100001],max=100000,flag[100001]={0};
scanf("%d%d",&N,&k);
int sum=0,count=0;
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
s[i]=sum%k;
flag[s[i]]++;
if(max<s[i]) max=s[i];
}
for(i=0;i<=max;i++)
{
if(i==0) count+=flag[i]+flag[i]*(flag[i]-1)/2;
else count+=flag[i]*(flag[i]-1)/2;
}
printf("%d",count);
return 0;
}
這個一直測驗不通過,我想知道原因是什么。
uj5u.com熱心網友回復:
a[100001],i,s[100001],max=100000,flag[100001]={0};堆疊上的空間沒那么多,樓主這一下子定義了4個陣列,并且每個陣列都這么大,建議樓主用動態申請空間malloc/free。
uj5u.com熱心網友回復:
原題是什么?看你的代碼,flag相乘(和階乘有一拼),估計結果超出int范圍了
uj5u.com熱心網友回復:
題目呢?為了回答你的問題
難道還得去參賽?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/57016.html
標籤:C語言
