怒被卡常

被卡常的沒有一絲絲防備。。。要ac可以試着特判一下1 sum之類的。。。

#include <cstdio> 
#include <cmath> 
#include <ctime> 
#include <string> 
#include <cstring> 
#include <cstdlib> 
#include <iostream> 
#include <algorithm> 
 #include<map>
#include <vector> 
 
#define pb push_back
 
#define forup(i,a,b) for(int i=(a);i<=(b);i++) 
#define fordown(i,a,b) for(int i=(a);i>=(b);i--) 
   
#define maxn 100005
#define maxm 100005
#define INF 1070000000 
using namespace std; 
typedef long long ll; 
typedef unsigned long long ull; 
   
template<class T> inline 
void read(T& num){   num = 0; bool f = true;char ch = getchar();   while(ch < '0' || ch > '9') { if(ch == '-') f = false;ch = getchar();}  while(ch >= '0' && ch <= '9') {num = num * 10 + ch - '0';ch = getchar();}   num = f ? num: -num; }
int out[100];
template<class T> inline
void write(T x,char ch){  if (x==0) {putchar('0'); putchar(ch); return;} if (x<0) {putchar('-'); x=-x;}int num=0; while (x){ out[num++]=(x%10); x=x/10;} fordown(i,num-1,0) putchar(out[i]+'0'); putchar(ch); }
/*==================split line==================*/
int n;
ll sum[maxn];
ll a[maxn];
map<ll,int> ans;
map<ll,int> gcd;
void solve(ll x)
{ gcd.clear();
forup(i,1,n) gcd[sum[i]%x]++;
int cmax=0;
for(map<ll,int>::iterator i=gcd.begin();i!=gcd.end();i++)
 cmax=max(i->second,cmax);
 
  ans[x]=cmax;
}
int main()
{cin>>n;
   forup(i,1,n) read(a[i]),sum[i]=sum[i-1]+a[i];
     ll p=sum[n];
    for(ll i=1;i*i<=p;i++)
     {if(p%i==0)  
       {solve(i);
       if(i*i!=p)  solve(p/i);
        }
      }
     
    forup(i,1,n)
  {  ll cmax=0;
     for(map<ll,int>::iterator j=ans.begin();j!=ans.end();j++)
     { if(j->second>=i)  cmax=max(cmax,j->first);
     }
     cout<<cmax<<endl;
      }
     
    return 0;
 }

發佈了56 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章