Moj kod za ovaj problem je OK za svi testove, ali kad ga ispratim daje pogresno resenje za 2 i 6-10 test primere.
Evo koda, pa ko moze neka vidi, mozda je problem u pecatenje, ili nesto slicno:
//#include "stdafx.h"
//-------------------- begin -----------------------\\
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
#define FOR(i,n) for (long i=0; i<(n); i++)
#define FORR(i,a,b) for (long i=(a); i<=(b); i++)
#define pb(x) push_back(x)
#define sz size()
#define V vector
#define L long
//----------------- declarations --------------------\\
V <L> l, r, a, b;
string s;
//------------------- program -----------------------\\
void input()
{
cin >> s;
FOR (i,s.sz) a.pb(s[i]-'0');
}
L dv()
{
L prenos = 0, t;
if (a[0] < 3) {
prenos = a[0];
if (a.sz == 1) b.pb(0);
}
else {
b.pb((int)(a[0]/3));
prenos = a[0] % 3;
}
FORR (i,1,a.sz-1) {
if (prenos)
t = 10 * prenos + a[i];
else
t = a[i];
if (t < 3) {
b.pb(0);
prenos = t;
}
else {
b.pb((int)(t/3));
prenos = t % 3;
}
}
a.clear();
FOR(i,b.sz) a.pb(b[i]);
b.clear();
return prenos;
}
void add()
{
L i = a.sz;
while (a[i] == 9) {
a[i] = 0; --i;
if (i < 0) {
a.insert(a.begin(), 0);
i = 0;
}
}
++a[i-1];
}
void print()
{
FOR(i,a.sz) cout << a[i];
cout << endl;
}
void solve()
{
L i = -1, t;
while (a[0]) {
++i;
t = dv();
//print();
if (t == 1)
l.insert(l.begin(), i);
else if (t == 2) {
r.insert(r.begin(), i);
add();
}
}
}
void output()
{
cout << l.sz << endl;
FOR(i,l.sz) cout << l[i] << endl;
cout << r.sz << endl;
FOR(i,r.sz) cout << r[i] << endl;
}
int main()
{
input();
solve();
output();
//system ("PAUSE");
return 0;
}
//--------------------- end -------------------------\\
Evo koda, pa ko moze neka vidi, mozda je problem u pecatenje, ili nesto slicno:
//#include "stdafx.h"
//-------------------- begin -----------------------\\
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
#define FOR(i,n) for (long i=0; i<(n); i++)
#define FORR(i,a,b) for (long i=(a); i<=(b); i++)
#define pb(x) push_back(x)
#define sz size()
#define V vector
#define L long
//----------------- declarations --------------------\\
V <L> l, r, a, b;
string s;
//------------------- program -----------------------\\
void input()
{
cin >> s;
FOR (i,s.sz) a.pb(s[i]-'0');
}
L dv()
{
L prenos = 0, t;
if (a[0] < 3) {
prenos = a[0];
if (a.sz == 1) b.pb(0);
}
else {
b.pb((int)(a[0]/3));
prenos = a[0] % 3;
}
FORR (i,1,a.sz-1) {
if (prenos)
t = 10 * prenos + a[i];
else
t = a[i];
if (t < 3) {
b.pb(0);
prenos = t;
}
else {
b.pb((int)(t/3));
prenos = t % 3;
}
}
a.clear();
FOR(i,b.sz) a.pb(b[i]);
b.clear();
return prenos;
}
void add()
{
L i = a.sz;
while (a[i] == 9) {
a[i] = 0; --i;
if (i < 0) {
a.insert(a.begin(), 0);
i = 0;
}
}
++a[i-1];
}
void print()
{
FOR(i,a.sz) cout << a[i];
cout << endl;
}
void solve()
{
L i = -1, t;
while (a[0]) {
++i;
t = dv();
//print();
if (t == 1)
l.insert(l.begin(), i);
else if (t == 2) {
r.insert(r.begin(), i);
add();
}
}
}
void output()
{
cout << l.sz << endl;
FOR(i,l.sz) cout << l[i] << endl;
cout << r.sz << endl;
FOR(i,r.sz) cout << r[i] << endl;
}
int main()
{
input();
solve();
output();
//system ("PAUSE");
return 0;
}
//--------------------- end -------------------------\\