Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.05 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int dirx[8]={0,0,1,-1,1,1,-1,-1};
  5. int diry[8]={1,-1,0,0,1,-1,1,-1};
  6. #define ll long long
  7. #define sc1(a) scanf("%d",&a)
  8. #define llsc1(a) scanf("%lld",&a)
  9. #define sc2(a,b) scanf("%d %d",&a,&b)
  10. #define llsc2(a,b) scanf("%lld %lld",&a,&b)
  11. #define sc3(a,b,c) scanf("%d %d %d",&a,&b,&c)
  12. #define llsc3(a,b,c) scanf("%lld %lld %lld",&a,&b,&c)
  13. #define min3(a,b,c) min(a,min(b,c))
  14. #define max3(a,b,c) max(a,max(b,c))
  15. #define pf printf
  16. #define cpfl(s) cout<<s<<endl
  17. #define cpf(s) cout<<s
  18. #define FOR(a) for(ll i=0;i<a;i++)
  19. #define inf 2e9
  20. #define pr pair<int,int>
  21. #define mpp make_pair
  22. #define pi acos(-1)
  23. #define all(a) a.begin(),a.end()
  24. #define newline pf("\n")
  25. #define mem(a,b) memset(a,b,sizeof(a))
  26. #define srt(a,n) sort(a,a+n)
  27. #define mx 100005
  28. #define mm 1420
  29. #define mod 1000000007
  30. #define frd freopen("input.txt","r",stdin)
  31. #define fpf freopen("output.txt","w",stdout)
  32. int gans,found,ar[15],br[15];
  33. int one(string s)
  34. {
  35. int ans=0;
  36. for(int i=0;i<s.length();i++)ans+=s[i]-'0';
  37. return ans;
  38. }
  39. int two(string s)
  40. {
  41. int ans=0,i=0;
  42. if(s.length()%2!=0){
  43. ans+=s[i]-'0';
  44. i++;
  45. }
  46. for(;i<s.length();i+=2){
  47. int t=s[i]-'0';
  48. t*=10;
  49. t+=s[i+1]-'0';
  50. ans+=t;
  51. }
  52. return ans;
  53. }
  54. int three(string s)
  55. {
  56. int ans=0,i=0;
  57. if(s.length()%3==1){
  58. ans+=s[i]-'0';
  59. i++;
  60. }
  61. else if(s.length()%3==2){
  62. ans+=s[i]-'0';
  63. ans*=10;
  64. ans+=s[i+1]-'0';
  65. i+=2;
  66. }
  67. for(;i<s.length();i+=3){
  68. int t=s[i]-'0';
  69. t*=10;
  70. t+=s[i+1]-'0';
  71. t*=10;
  72. t+=s[i+2]-'0';
  73. ans+=t;
  74. }
  75. return ans;
  76. }
  77. void printone(string s)
  78. {
  79. cpf(s[0]);
  80. for(int i=1;i<s.length();i++)cpf("+"<<s[i]);
  81. newline;
  82. }
  83. void printtwo(string s)
  84. {
  85. int len=s.length(),i=0;
  86. if(len%2!=0){
  87. cpf(s[0]);
  88. i++;
  89. }
  90. else{
  91. cpf(s[0]<<s[1]);
  92. i=2;
  93. }
  94. for(;i<len;i+=2)cpf("+"<<s[i]<<s[i+1]);
  95. newline;
  96. }
  97. void printthree(string s)
  98. {
  99. int len=s.length(),i=0;
  100. if(len%3==1){
  101. cpf(s[i]);
  102. i++;
  103. }
  104. else if(len%3==2){
  105. cpf(s[i]<<s[i+1]);
  106. i+=2;
  107. }
  108. else{
  109. cpf(s[i]<<s[i+1]<<s[i+2]);
  110. i+=3;
  111. }
  112. for(;i<len;i+=3)cpf("+"<<s[i]<<s[i+1]<<s[i+2]);
  113. newline;
  114. }
  115. int four(string s)
  116. {
  117. int len=s.length(),ans=0,i=0;
  118. if(len%4==1){
  119. ans+=s[i]-'0';
  120. i++;
  121. }
  122. else if(len%4==2){
  123. int t=s[i]-'0';
  124. t*=10;t+=s[i+1]-'0';
  125. ans+=t;
  126. i+=2;
  127. }
  128. else if(len%4==3){
  129. int t=s[i]-'0';
  130. t*=10;t+=s[i+1]-'0';
  131. t*=10;t+=s[i+2]-'0';
  132. ans+=t;
  133. i+=3;
  134. }
  135. for(;i<len;i+=4){
  136. int t=s[i]-'0';
  137. t*=10;t+=s[i+1]-'0';
  138. t*=10;t+=s[i+2]-'0';
  139. t*=10;t+=s[i+3]-'0';
  140. ans+=t;
  141. }
  142. return ans;
  143. }
  144. void printfour(string s)
  145. {
  146. int len=s.length(),i=0;
  147. if(len%4==1){
  148. cpf(s[i]);
  149. i++;
  150. }
  151. else if(len%4==2){
  152. cpf(s[i]<<s[i+1]);
  153. i+=2;
  154. }
  155. else if(len%4==3){
  156. cpf(s[i]<<s[i+1]<<s[i+2]);
  157. i+=3;
  158. }
  159. else {
  160. cpf(s[i]<<s[i+1]<<s[i+2]<<s[i+3]);
  161. i+=4;
  162. }
  163. for(;i<len;i+=4)cpf("+"<<s[i]<<s[i+1]<<s[i+2]<<s[i+3]);
  164. newline;
  165. }
  166. int five(string s)
  167. {
  168. int len=s.length(),ans=0,i=0;
  169. if(len%5==1){
  170. ans+=s[i]-'0';
  171. i++;
  172. }
  173. else if(len%5==2){
  174. int t=s[i]-'0';
  175. t*=10;t+=s[i+1]-'0';
  176. ans+=t;
  177. i+=2;
  178. }
  179. else if(len%5==3){
  180. int t=s[i]-'0';
  181. t*=10;t+=s[i+1]-'0';
  182. t*=10;t+=s[i+2]-'0';
  183. ans+=t;
  184. i+=3;
  185. }
  186. else if(len%5==4){
  187. int t=s[i]-'0';
  188. t*=10;t+=s[i+1]-'0';
  189. t*=10;t+=s[i+2]-'0';
  190. t*=10;t+=s[i+3]-'0';
  191. ans+=t;
  192. i+=4;
  193. }
  194. for(;i<len;i+=5){
  195. int t=s[i]-'0';
  196. t*=10;t+=s[i+1]-'0';
  197. t*=10;t+=s[i+2]-'0';
  198. t*=10;t+=s[i+3]-'0';
  199. t*=10;t+=s[i+4]-'0';
  200. ans+=t;
  201. }
  202. return ans;
  203. }
  204. void printfive(string s)
  205. {
  206. int len=s.length(),i=0;
  207. if(len%5==1){
  208. cpf(s[i]);
  209. i++;
  210. }
  211. else if(len%5==2){
  212. cpf(s[i]<<s[i+1]);
  213. i+=2;
  214. }
  215. else if(len%5==3){
  216. cpf(s[i]<<s[i+1]<<s[i+2]);
  217. i+=3;
  218. }
  219. else if(len%5==4){
  220. cpf(s[i]<<s[i+1]<<s[i+2]<<s[i+3]);
  221. i+=4;
  222. }
  223. else {
  224. cpf(s[i]<<s[i+1]<<s[i+2]<<s[i+3]<<s[i+4]);
  225. i+=5;
  226. }
  227. for(;i<len;i+=5)cpf("+"<<s[i]<<s[i+1]<<s[i+2]<<s[i+3]<<s[i+4]);
  228. newline;
  229. }
  230. void printback(string s)
  231. {
  232. int len=s.length(),f=0;
  233. for(int i=0;i<len;i++){
  234. int t=br[i];
  235. if(t==1){
  236. if(!f){
  237. cpf(s[i]);
  238. f=1;
  239. }
  240. else cpf("+"<<s[i]);
  241. }
  242. else if(t==2){
  243. if(!f){
  244. cpf(s[i]<<s[i+1]);
  245. f=1;
  246. }
  247. else cpf("+"<<s[i]<<s[i+1]);
  248. i++;
  249. }
  250. else{
  251. if(!f){
  252. cpf(s[i]<<s[i+1]<<s[i+2]);
  253. f=1;
  254. }
  255. else cpf("+"<<s[i]<<s[i+1]<<s[i+2]);
  256. i+=2;
  257. }
  258. }
  259. newline;
  260. }
  261. int digitSum(int n)
  262. {
  263. int ans=0;
  264. while(n!=0){
  265. ans+=(n%10);
  266. n/=10;
  267. }
  268. return ans;
  269. }
  270. void backtrack(int i,int num,int n,string s)
  271. {
  272. if(found)return ;
  273. if(i>=n){
  274. if(digitSum(num)<10){
  275. gans=num;
  276. for(int j=0;j<n;j++)br[j]=ar[j];
  277. found=1;
  278. }
  279. return ;
  280. }
  281. ar[i]=1;
  282. backtrack(i+1,num+(s[i]-'0'),n,s);
  283. if(i+1<n){
  284. int t=s[i]-'0';
  285. t*=10;
  286. t+=s[i+1]-'0';
  287. ar[i]=2;
  288. ar[i+1]=2;
  289. backtrack(i+2,num+t,n,s);
  290. }
  291. if(i+2<n){
  292. int t=s[i]-'0';
  293. t*=10;
  294. t+=s[i+1]-'0';
  295. t*=10;
  296. t+=s[i+2]-'0';
  297. ar[i]=3;
  298. ar[i+1]=3;
  299. ar[i+2]=3;
  300. backtrack(i+3,num+t,n,s);
  301. }
  302. }
  303. string tostring(int n)
  304. {
  305. if(!n)return "0";
  306. string ans="";
  307. while(n!=0){
  308. ans+=(n%10)+'0';
  309. n/=10;
  310. }
  311. reverse(ans.begin(),ans.end());
  312. return ans;
  313. }
  314. void solve(string s)
  315. {
  316. int t=one(s);
  317. string tt=tostring(t);
  318. backtrack(0,0,tt.length(),tt);
  319. if(found){
  320. printone(s);
  321. printback(tt);
  322. tt=tostring(gans);
  323. printone(tt);
  324. return ;
  325. }
  326. found=0;
  327. t=two(s);
  328. tt=tostring(t);
  329. backtrack(0,0,tt.length(),tt);
  330. if(found){
  331. printtwo(s);
  332. printback(tt);
  333. tt=tostring(gans);
  334. printone(tt);
  335. return ;
  336. }
  337. found=0;
  338. t=three(s);
  339. tt=tostring(t);
  340. backtrack(0,0,tt.length(),tt);
  341. if(found){
  342. printthree(s);
  343. printback(tt);
  344. tt=tostring(gans);
  345. printone(tt);
  346. return ;
  347. }
  348. found=0;
  349. t=four(s);
  350. tt=tostring(t);
  351. backtrack(0,0,tt.length(),tt);
  352. if(found){
  353. printfour(s);
  354. printback(tt);
  355. tt=tostring(gans);
  356. printone(tt);
  357. return ;
  358. }
  359. found=0;
  360. t=five(s);
  361. tt=tostring(t);
  362. backtrack(0,0,tt.length(),tt);
  363. if(found){
  364. printfive(s);
  365. printback(tt);
  366. tt=tostring(gans);
  367. printone(tt);
  368. return ;
  369. }
  370. }
  371. int main()
  372. {
  373. //frd;
  374. //fpf;
  375. //cpfl(four("1111112"));return 0;
  376. int n;
  377. string s;
  378. cin>>n>>s;
  379. solve(s);
  380. return 0;
  381. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement