Pagini recente » Cod sursa (job #887963) | Cod sursa (job #1287436) | Cod sursa (job #1271433) | Cod sursa (job #1028) | Cod sursa (job #2811514)
#include <bits/stdc++.h>
using namespace std;
class reguli{
private:
FILE *fin;
char *buff;
int sp;
char read_ch(){
++sp;
if(sp==4096){
sp=0;
fread(buff,1,4096,fin);
}
return buff[sp];
}
public:
reguli(const char *name){
fin=fopen(name,"r");
buff=new char [4096]();
sp=4095;
}
reguli& operator >>(long long int &n){
char c;
int signn=1;
while(!isdigit(c=read_ch()) && c!='-');
if(c=='-'){
n=0;
signn=-1;
}else n=c-'0';
while(isdigit(c=read_ch()))
n=n*10+c-'0';
n*=signn;
return *this;
}
};
FILE *g=fopen("reguli.out","w");
const int nmax=5e5;
long long int n,s[nmax+5],a,b;
bool verifica(int k){
for(int i=1;i+k<n;++i)
if(s[i]!=s[i+k] && i+k<n)
return 0;
return 1;
}
static void afis(int first){
fprintf(g,"%d\n",first);
for(int i=1;i<=first;++i)
fprintf(g,"%lld\n",s[i]);
}
inline int solve(){
vector <int> pi(n+1,0);
pi[1]=0;
int q=0;
for(int i=2;i<=n;++i){
while(q && s[q+1]!=s[i])
q=pi[q];
if(s[q+1]==s[i])
++q;
pi[i]=q;
}
for(int i=1;i<=n;++i){
int l=i;
int r=n%l;
int f=n/l;
if(pi[n-r] && (n-r)%(n-r-pi[i])==0 && (n-r)/(n-r-pi[i]) && verifica(l)){
afis(i);
return 0;
}
}
afis(n);
return n;
}
int main()
{
reguli fin("reguli.in");
fin>>n;
fin>>a;
--n;
for(int i=1;i<=n;++i){
fin>>b;
s[i]=b-a;
a=b;
}
solve();
}