#include<iostream>
#include<list>
#include<string>
#include<cstring>
#include<sstream>
#include<cctype>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<stack>
#include<fstream>
#include<cstdlib>
#include<vector>
#include<map>
#include<utility>
#include<iomanip>
#include<queue>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define fill(a,v) memset(a,v,sizeof(a))
#define PB push_back
#define pi acos(-1.0)
#define eps 1e-9
int main()
{
string s1,s2;
bool check,conti;
long base1,base2,power,i,sum1,sum2;
while(cin>>s1>>s2)
{
check=false;
for(base1=2;base1<=36;base1++)
{
for(base2=2;base2<=36;base2++)
{
sum1=0;
power=0;
conti=false;
for(i=s1.length()-1;i>=0;i--)
{
if(s1[i]>47 && s1[i]<58)
{
sum1+=(s1[i]-48)*pow(base1,power++);
if(s1[i]-48>=base1)
conti=true;
}
else
{
sum1+=(s1[i]-55)*pow(base1,power++);
if(s1[i]-55>=base1)
conti=true;
}
}
sum2=0;
power=0;
for(i=s2.length()-1;i>=0;i--)
{
if(s2[i]>47 && s2[i]<58)
{
sum2+=(s2[i]-48)*pow(base2,power++);
if(s2[i]-48>=base2)
conti=true;
}
else
{
sum2+=(s2[i]-55)*pow(base2,power++);
if(s2[i]-55>=base2)
conti=true;
}
}
if(conti)
continue;
if(sum1==sum2)
{
check=true;
cout<<s1<<" (base "<<base1<<") = "<<s2<<" (base "<<base2<<")"<<endl;
break;
}
}
if(check)
break;
}
if(!check)
cout<<s1<<" is not equal to "<<s2<<" in any base 2..36"<<endl;
}
return 0;
}
Saturday, 5 May 2012
UVa 336 A Node Too Far Solution
#include<iostream>
#include<vector>
#include<map>
#include<queue>
using namespace std;
int main()
{
long long nc,i,pair1,pair2,node,ttl,number,l,x,diff,cs=1;
vector<long long>v[100000];
map<long long,int>mp;
map<long long,int>visit;
map<long long,int>dif;
queue<long long>q;
while(cin>>nc)
{
if(nc==0) return 0;
diff=0;
dif.clear();
for(i=0;i<99900;i++)
v[i].clear();
mp.clear();
for(i=0;i<nc;i++)
{
cin>>pair1>>pair2;
v[pair1].push_back(pair2);
v[pair2].push_back(pair1);
if(dif[pair1]!=1)
{
dif[pair1]=1;
diff++;
}
if(dif[pair2]!=1)
{
dif[pair2]=1;
diff++;
}
}
//cout<<diff<<endl;
while(cin>>node>>ttl)
{
if(node==0 && ttl==0)
break;
number=0;
visit.clear();
visit[node]=1;
mp[node]=0;
q.push(node);
while(!q.empty())
{
x=q.front();
q.pop();
l=v[x].size();
for(i=0;i<l;i++)
{
if(visit[v[x][i]]!=1)
{
mp[v[x][i]]=mp[x]+1;
if(mp[v[x][i]]>ttl)
break;
number++;
visit[v[x][i]]=1;
q.push(v[x][i]);
}
}
}
cout<<"Case "<<cs<<": "<<diff-number-1<<" "<<"nodes not reachable from node "<<node<<" with TTL = "<<ttl<<"."<<endl;
cs++;
}
}
}
#include<vector>
#include<map>
#include<queue>
using namespace std;
int main()
{
long long nc,i,pair1,pair2,node,ttl,number,l,x,diff,cs=1;
vector<long long>v[100000];
map<long long,int>mp;
map<long long,int>visit;
map<long long,int>dif;
queue<long long>q;
while(cin>>nc)
{
if(nc==0) return 0;
diff=0;
dif.clear();
for(i=0;i<99900;i++)
v[i].clear();
mp.clear();
for(i=0;i<nc;i++)
{
cin>>pair1>>pair2;
v[pair1].push_back(pair2);
v[pair2].push_back(pair1);
if(dif[pair1]!=1)
{
dif[pair1]=1;
diff++;
}
if(dif[pair2]!=1)
{
dif[pair2]=1;
diff++;
}
}
//cout<<diff<<endl;
while(cin>>node>>ttl)
{
if(node==0 && ttl==0)
break;
number=0;
visit.clear();
visit[node]=1;
mp[node]=0;
q.push(node);
while(!q.empty())
{
x=q.front();
q.pop();
l=v[x].size();
for(i=0;i<l;i++)
{
if(visit[v[x][i]]!=1)
{
mp[v[x][i]]=mp[x]+1;
if(mp[v[x][i]]>ttl)
break;
number++;
visit[v[x][i]]=1;
q.push(v[x][i]);
}
}
}
cout<<"Case "<<cs<<": "<<diff-number-1<<" "<<"nodes not reachable from node "<<node<<" with TTL = "<<ttl<<"."<<endl;
cs++;
}
}
}
UVa 299 Train Swapping Solution
#include<stdio.h>
int main()
{
int i,j,k,a,n,t,item[100],count;
while(scanf("%d",&a)==1)
{
for(k=1;k<=a;k++)
{
count=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&item[i]);
for(i=1;i<n;i++)
for(j=n-1;j>=i;j--)
if(item[j-1]>item[j])
{
count=count+1;
t=item[j-1];
item[j-1]=item[j];
item[j]=t;
}
printf("Optimal train swapping takes %d swaps.\n",count);
}
}
return 0;
}
int main()
{
int i,j,k,a,n,t,item[100],count;
while(scanf("%d",&a)==1)
{
for(k=1;k<=a;k++)
{
count=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&item[i]);
for(i=1;i<n;i++)
for(j=n-1;j>=i;j--)
if(item[j-1]>item[j])
{
count=count+1;
t=item[j-1];
item[j-1]=item[j];
item[j]=t;
}
printf("Optimal train swapping takes %d swaps.\n",count);
}
}
return 0;
}
UVa 272 TeX Quotes Solution
#include<stdio.h>
#include<string.h>
int main()
{
long int i,count=0,l;
char s[100000];
while(gets(s))
{
l=strlen(s);
for(i=0;i<l;i++)
{
if(s[i]=='"')
{
count=count+1;
if(count%2==1)
printf("``");
else
printf("''");
}
else
printf("%c",s[i]);
}
printf("\n");
}
return 0;
}
#include<string.h>
int main()
{
long int i,count=0,l;
char s[100000];
while(gets(s))
{
l=strlen(s);
for(i=0;i<l;i++)
{
if(s[i]=='"')
{
count=count+1;
if(count%2==1)
printf("``");
else
printf("''");
}
else
printf("%c",s[i]);
}
printf("\n");
}
return 0;
}
UVa 263 Number Chains Solution
#include<iostream>
#include<string>
#include<cstring>
#include<sstream>
#include<cctype>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<stack>
#include<fstream>
#include<cstdlib>
#include<vector>
#include<map>
#include<utility>
#include<iomanip>
#include<queue>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define PB push_back
int main()
{
long long n,a[1000],i,j,x,nc,big,small;
string s,s1,s2;
map<string,long long>M;
while(cin>>n)
{
if(n==0) return 0;
nc=1;
M.clear();
stringstream ss;
ss<<n;
s=ss.str();
cout<<"Original number was "<<n<<endl;
while(1)
{
clr(a);
for(i=0;i<s.length();i++)
a[i]=s[i]-'0';
sort(a,a+s.length());
s1=s2="";
for(i=0,j=s.length()-1;i<s.length();i++,j--)
{
s1+=a[i]+'0';
s2+=a[j]+'0';
}
stringstream ss1(s1);
ss1>>small;
stringstream ss2(s2);
ss2>>big;
x=big-small;
stringstream ss3;
ss3<<x;
s=ss3.str();
cout<<big<<" - "<<small<<" = "<<x<<endl;
if(M[s]==1) break;
else M[s]=1;
nc++;
}
cout<<"Chain length "<<nc<<endl<<endl;
}
return 0;
}
#include<string>
#include<cstring>
#include<sstream>
#include<cctype>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<stack>
#include<fstream>
#include<cstdlib>
#include<vector>
#include<map>
#include<utility>
#include<iomanip>
#include<queue>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define PB push_back
int main()
{
long long n,a[1000],i,j,x,nc,big,small;
string s,s1,s2;
map<string,long long>M;
while(cin>>n)
{
if(n==0) return 0;
nc=1;
M.clear();
stringstream ss;
ss<<n;
s=ss.str();
cout<<"Original number was "<<n<<endl;
while(1)
{
clr(a);
for(i=0;i<s.length();i++)
a[i]=s[i]-'0';
sort(a,a+s.length());
s1=s2="";
for(i=0,j=s.length()-1;i<s.length();i++,j--)
{
s1+=a[i]+'0';
s2+=a[j]+'0';
}
stringstream ss1(s1);
ss1>>small;
stringstream ss2(s2);
ss2>>big;
x=big-small;
stringstream ss3;
ss3<<x;
s=ss3.str();
cout<<big<<" - "<<small<<" = "<<x<<endl;
if(M[s]==1) break;
else M[s]=1;
nc++;
}
cout<<"Chain length "<<nc<<endl<<endl;
}
return 0;
}
Subscribe to:
Posts (Atom)