fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define dd double
  5. #define ld long double
  6. #define pi 3.14159265359
  7. #define ull unsigned long long
  8. #define yes cout<<"YES\n"
  9. #define no cout<<"NO\n"
  10. #define el "\n"
  11. #define Arwa ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  12. #define fix(x) cout<<fixed<<setprecision(x)
  13. ll gcd(ll a,ll b) {return b==0?a:gcd(b,a%b);}
  14. ll lcm(int a,int b) {return a/gcd(a,b)*b;}
  15. bool prime(ll n)
  16. {
  17. if(n==2) return true;
  18. if(n%2==0||n==1) return false;
  19. else { for(ll i=3; i*i<=n; i+=2) {if(n%i==0) return false;}}return true;
  20. }
  21. //here we go again
  22. int main()
  23. {
  24. Arwa
  25. int t=1;
  26. //cin>>t;
  27. while(t--)
  28. {
  29. int n;
  30. cin>>n;
  31. int arr[n],fake1[n],fake2[n],fake3[n],fake4[n],fake5[n],fake6[n],fake7[n],fake8[n],fake9[n],c1=0,c2=0,c3=0,c4=0,c5=0,c6=0,c7=0,c8=0,c9=0;
  32. bool f1=1,f2=1,f3=1,f4=1,f5=1,f6=1,f7=1,f8=1,f9=1;
  33. for(int i=0;i<n;i++)
  34. cin>>arr[i];
  35. for(int i=0;i<n;i++)
  36. {
  37. fake1[i]=arr[i];
  38. fake2[i]=arr[i];
  39. fake3[i]=arr[i];
  40. fake4[i]=arr[i];
  41. fake5[i]=arr[i];
  42. fake6[i]=arr[i];
  43. fake7[i]=arr[i];
  44. fake8[i]=arr[i];
  45. fake9[i]=arr[i];
  46. }
  47. // SAME DIFF
  48. int a=abs(fake1[1]-fake1[0]);
  49. for(int i=2;i<n;i++)
  50. {
  51. if(abs(fake1[i]-fake1[i-1])-a==1)
  52. {
  53. fake1[i]++; c1++;
  54. }
  55. else if(abs(fake1[i]-fake1[i-1])-a==-1)
  56. {
  57. fake1[i]--; c1++;
  58. }
  59. else if(abs(fake1[i]-fake1[i-1])-a==0)
  60. continue;
  61. else
  62. {
  63. f1=0; c1=0; break;
  64. }
  65. }
  66. // Same(both will decrease)
  67. int g=abs(fake6[1]-fake6[0]);
  68. fake6[1]--;fake6[0]--;c6+=2;
  69. for(int i=2;i<n;i++)
  70. {
  71. if(abs(fake6[i]-fake6[i-1])-g==1)
  72. {
  73. fake6[i]++; c6++;
  74. }
  75. else if(abs(fake6[i]-fake6[i-1])-g==-1)
  76. {
  77. fake6[i]--; c6++;
  78. }
  79. else if(abs(fake6[i]-fake6[i-1])-g==0)
  80. continue;
  81. else
  82. {
  83. f6=0; c6=0; break;
  84. }
  85. }
  86. // Same(both will increase)
  87. int h=abs(fake7[1]-fake7[0]);
  88. fake7[1]++;fake7[0]++;c7+=2;
  89. for(int i=2;i<n;i++)
  90. {
  91. if(abs(fake7[i]-fake7[i-1])-h==1)
  92. {
  93. fake7[i]++; c7++;
  94. }
  95. else if(abs(fake7[i]-fake7[i-1])-h==-1)
  96. {
  97. fake7[i]--; c7++;
  98. }
  99. else if(abs(fake7[i]-fake7[i-1])-h==0)
  100. continue;
  101. else
  102. {
  103. f7=0; c7=0; break;
  104. }
  105. }
  106. //min will increase by 1(diff will decrease by 1)
  107. int b=abs(fake2[1]-fake2[0])-1;
  108. if(fake2[1]<=fake2[0])
  109. fake2[1]++; else fake2[0]++;
  110. c2++;
  111. for(int i=2;i<n;i++)
  112. {
  113. if(abs(fake2[i]-fake2[i-1])-b==1)
  114. {
  115. fake2[i]++; c2++;
  116. }
  117. else if(abs(fake2[i]-fake2[i-1])-b==-1)
  118. {
  119. fake2[i]--; c2++;
  120. }
  121. else if(abs(fake2[i]-fake2[i-1])-b==0)
  122. continue;
  123. else
  124. {
  125. f2=0; c2=0; break;
  126. }
  127. }
  128. //max will decrease by 1(diff will decrease by 1)
  129. int s=abs(fake9[1]-fake9[0])-1;
  130. if(fake9[1]<=fake9[0])
  131. fake9[0]--; else fake9[1]--;
  132. c9++;
  133. for(int i=2;i<n;i++)
  134. {
  135. if(abs(fake9[i]-fake9[i-1])-s==1)
  136. {
  137. fake9[i]++; c9++;
  138. }
  139. else if(abs(fake9[i]-fake9[i-1])-s==-1)
  140. {
  141. fake9[i]--; c9++;
  142. }
  143. else if(abs(fake9[i]-fake9[i-1])-s==0)
  144. continue;
  145. else
  146. {
  147. f9=0; c9=0; break;
  148. }
  149. }
  150. //min will increase max will decrease(diff decrease by 2)
  151. int d=abs(fake3[1]-fake3[0])-2;
  152. if(fake3[1]<=fake3[0])
  153. {
  154. fake3[1]++; fake3[0]--;
  155. }
  156. else
  157. {
  158. fake3[0]++; fake3[1]--;
  159. }
  160. c3+=2;
  161. for(int i=2;i<n;i++)
  162. {
  163. if(abs(fake3[i]-fake3[i-1])-d==1)
  164. {
  165. fake3[i]++; c3++;
  166. }
  167. else if(abs(fake3[i]-fake3[i-1])-d==-1)
  168. {
  169. fake3[i]--; c3++;
  170. }
  171. else if(abs(fake3[i]-fake3[i-1])-d==0)
  172. continue;
  173. else
  174. {
  175. f3=0; c3=0; break;
  176. }
  177. }
  178. //min will decrease by 1(diff will increase by1)
  179. int e=abs(fake4[1]-fake4[0])+1;
  180. if(fake4[1]<=fake4[0])
  181. fake4[1]--; else fake4[0]--;
  182. c4++;
  183. for(int i=2;i<n;i++)
  184. {
  185. if(abs(fake4[i]-fake4[i-1])-e==1)
  186. {
  187. fake4[i]++; c4++;
  188. }
  189. else if(abs(fake4[i]-fake4[i-1])-e==-1)
  190. {
  191. fake4[i]--; c4++;
  192. }
  193. else if(abs(fake4[i]-fake4[i-1])-e==0)
  194. continue;
  195. else
  196. {
  197. f4=0; c4=0; break;
  198. }
  199. }
  200. //max will increase by 1(diff will increase by1)
  201. int l=abs(fake8[1]-fake8[0])+1;
  202. if(fake8[1]<=fake8[0])
  203. fake8[0]++; else fake8[1]++;
  204. c8++;
  205. for(int i=2;i<n;i++)
  206. {
  207. if(abs(fake8[i]-fake8[i-1])-l==1)
  208. {
  209. fake8[i]++; c8++;
  210. }
  211. else if(abs(fake8[i]-fake8[i-1])-l==-1)
  212. {
  213. fake8[i]--; c8++;
  214. }
  215. else if(abs(fake8[i]-fake8[i-1])-l==0)
  216. continue;
  217. else
  218. {
  219. f8=0; c8=0; break;
  220. }
  221. }
  222. //min will decrease max will increase(diff increase by 2)
  223. int f=abs(fake5[1]-fake5[0])+2;
  224. if(fake5[1]<=fake5[0])
  225. {
  226. fake5[1]--; fake5[0]++;
  227. }
  228. else
  229. {
  230. fake5[0]--; fake5[1]++;
  231. }
  232. c5+=2;
  233. for(int i=2;i<n;i++)
  234. {
  235. if(abs(fake5[i]-fake5[i-1])-f==1)
  236. {
  237. fake5[i]++; c5++;
  238. }
  239. else if(abs(fake5[i]-fake5[i-1])-f==-1)
  240. {
  241. fake5[i]--; c5++;
  242. }
  243. else if(abs(fake5[i]-fake5[i-1])-f==0)
  244. continue;
  245. else
  246. {
  247. f5=0; c5=0; break;
  248. }
  249. }
  250. //cout<<f1<<' '<<c1<<el<<f2<<' '<<c2<<el<<f3<<' '<<c3<<el<<f4<<' '<<c4<<el<<f5<<' '<<c5<<el<<f6<<' '<<c6<<el<<f7<<' '<<c7<<el<<f8<<' '<<c8<<el<<f9<<' '<<c9<<el;
  251. int min=1000000000;
  252. if(f1)
  253. { if(min>c1) min=c1; }
  254. if(f2)
  255. { if(min>c2) min=c2; }
  256. if(f3)
  257. { if(min>c3) min=c3; }
  258. if(f4)
  259. { if(min>c4) min=c4; }
  260. if(f5)
  261. { if(min>c5) min=c5; }
  262. if(f6)
  263. { if(min>c6) min=c6; }
  264. if(f7)
  265. { if(min>c7) min=c7; }
  266. if(f8)
  267. { if(min>c8) min=c8; }
  268. if(f9)
  269. { if(min>c9) min=c9; }
  270. if(min==1000000000)
  271. cout<<-1<<el;
  272. else cout<<min<<el;
  273. }
  274. return 0;
  275. }
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
-1