ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Общий форум

Why I have WA #8?
Послано Clark_Farisson 3 апр 2009 00:13
Why I have WA #8? I think my program isn't wrong. Some test data can you give me?
#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
#include<string>
using namespace std;
string sub(string a,string b)
{
int c=max(a.length(),b.length());
string s1(c-a.length(),'0'),s2(c-b.length(),'0');
s1+=a;s2+=b;
int naum=0;string s3;for(int i=c-1;i>=0;i--)
{
s3+=(s1[i]+s2[i]-96+naum)%10+'0';
naum=(s1[i]+s2[i]-96+naum)/10;
}
if(naum)s3+=naum+'0';
reverse(s3.begin(),s3.end());
return s3;
}
string umn(string a,int b)
{
int naum=0;
string c;
for(int i=a.length()-1;i>=0;i--)
        {
        c+=((a[i]-'0')*b+naum)%10+'0';
        naum=((a[i]-'0')*b+naum)/10;
        }
if(naum)c+=naum+'0';
reverse(c.begin(),c.end());
return c;
}
string umn1(string a,string b)
{
string c="0";
for(int i=0;i<b.length();i++)
        {
        string e(b.length()-i-1,'0');
        c=sub(c,umn(a,b[i]-'0')+e);
        }
return c;
}
string razl(string a,string b)
{
int c=max(a.length(),b.length());
string s1(c-a.length(),'0'),s2(c-b.length(),'0');s1+=a;s2+=b;
int naum=0;
string s3;
for(int i=s1.length()-1;i>=0;i--)
{
int a=s1[i]-s2[i];
if(naum){a--;naum=0;}
if(a<0){naum=1;a+=10;}
s3+=a+'0';
}
reverse(s3.begin(),s3.end());
while(s3[0]=='0'&&s3.length()>1)s3.erase(0,1);
return s3;
}
string int_to_str(int n)
{
       string s;
       while(n){s+=n%10+'0';n/=10;}
       reverse(s.begin(),s.end());
       return s;
}
int cmp(string a,string b){
if(a==b||a.length()<b.length()||(a.length()==b.length()&&a<b))return 1;
return 0;
}
int main()
{
/*
cout<<sub("112","33")<<endl;
cout<<razl("112","33")<<endl;
cout<<umn1("112","33")<<endl;
*/
string s;
cin>>s;
if(s=="0"){cout<<0<<endl;return 0;}
s=umn(s,2);
string res;
vector<string>a;
int j=0;
if(s.length()%2==1)
{
j=1;
string m;m+=s[0];
a.push_back(m);
}
for(int i=j;i<s.length();i+=2)
a.push_back(s.substr(i,2));
int x;
if(a[0].size()==1)x=a[0][0]-'0';else x=a[0][0]*10+a[0][1]-528;
double m=sqrt((double)(x));
int n=(int)(m);
res=int_to_str(n);
int q=x-n*n;
string f;
f=int_to_str(q);
for(int k=1;k<a.size();k++)
{
string y=res;
int l;
y=umn(y,2);
f+=a[k];
//cout<<f<<endl;
string j[20];
if(f[0]=='0'){res+="0";continue;}
char c='0';
j[0]=umn(y+c,c-'0');
//cout<<j[0]<<endl;
c='1';
j[1]=umn(y+c,c-'0');
//cout<<j[1]<<endl;
if(cmp(j[0],f)==1&&cmp(j[1],f)==0)
{res+="0";l=0;}
for(int i=2;i<=9;i++)
{
c=i+'0';
j[i]=umn(y+c,i);
//cout<<j[i]<<endl;
if(cmp(j[i-1],f)==1&&cmp(j[i],f)==0){res+=i-1+'0';l=i-1;break;}
}
if(res.length()!=k+1){res+="9";l=9;}
f=razl(f,j[l]);
}
cout<<res<<endl;
system("pause");return 0;
}