N^2都能过!!!!!!!
/*
Easy
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<math.h>
using namespace std;
typedef long long int64;
//typedef __int64 int64;
typedef pair<int64,int64> PII;
#define MP(a,b) make_pair((a),(b))
const int maxn = 100005;
const int inf = 0x7fffffff;
const double pi=acos(-1.0);
const double eps = 1e-8;
int a[ maxn ];
int sum[ maxn ];
int main(){
int n,mod;
while( scanf("%d%d",&n,&mod)==2 ){
sum[ 0 ] = 0;
for( int i=1;i<=n;i++ ){
scanf("%d",&a[i]);
sum[ i ] = sum[ i-1 ]+a[ i ];
}
int M = 0;
for( int i=1;i<=n;i++ ){
for( int j=1;j<=i&&(i-j+1>M);j++ ){
if( (sum[i]-sum[j-1])%mod==0 ){
M = i-j+1;
}
}
}
printf("%d\n",M);
}
return 0;
}
没救了!!!
怎么注释里的就是一直WA!!!!!!!
/*
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<math.h>
using namespace std;
typedef long long int64;
//typedef __int64 int64;
typedef pair<int64,int64> PII;
#define MP(a,b) make_pair((a),(b))
const int maxn = 100005;
const int inf = 0x7fffffff;
const double pi=acos(-1.0);
const double eps = 1e-8;
struct Node{
int sum,id;
}a[ maxn ];
int cmp( Node a,Node b ){
if( a.sum!=b.sum )
return a.sum<b.sum;
else
return a.id<b.id;
}
int main(){
int n,mod;
while( scanf("%d%d",&n,&mod)==2 ){
int tt;
a[ 0 ].sum = a[ 0 ].id = 0;
for( int i=1;i<=n;i++ ){
scanf("%d",&tt);
a[ i ].sum = (a[ i-1 ].sum + tt)%mod;//还有就是注意负数!!
a[ i ].id = i;
if( mod!=0 )
a[ i ].sum = (a[ i ].sum+mod)%mod;//!!
}
int M = 0;
sort( a+1,a+1+n,cmp );
int j = 0;
for( int i=1;i<=n;i++ ){
if( a[i].sum!=a[j].sum )
j = i;
M = max( M,a[i].id-a[j].id );
/*
int V = a[i].sum;
int IDMin = a[i].id;
int IDMax = IDMin;
//int f ;
for( j=i+1;V==a[j].sum&&j<=n;j++ ){
//f = j;
//i = j;
IDMin = min( IDMin,a[j].id );
IDMax = max( IDMax,a[j].id );
}
M = max( M,IDMax-IDMin );
*/
}
printf("%d\n",M);
}
return 0;
}