4
#include<stdio.h>
int ones[9999],tens[999],n,i,j,k,s,t,best_i,best_j,best_s,best_t;
bool ck()
{
int p,q,r;
if(i>5)
return 1;
p=s;
r=t;
for(q=0;q<j;q++)
p=p*10+s;
for(q=0;q<i-j;q++)
p=p*10;
for(q=1;q<i-j;q++)
r=r*10+t;
return p+r>n;
}
int main()
{
while(scanf("%d",&n)*n)
{
printf("%d: ",n);
if(n==1)
{
puts("1 1 1 0");
continue;
}
ones[0]=1;
tens[0]=1;
for(i=1;i<9999;i++)
ones[i]=(ones[i-1]*10+1)%n;
for(i=1;i<999;i++)
tens[i]=tens[i-1]*10%n;
for(i=1,best_s=0;i<9999;i++)
{
k=0;
if((n%10==0||n%25==0) && i>11)
k=i-11;
for(j=k;j<i;j++)
for(s=1;s<10;s++)
for(t=0;t<(n%10?10:1);t++)
if(t!=s&&(((long long)ones[j])*tens[i-j]*s + ones[i-j-1]*t)%n==0 && ck() && (!best_s||s<best_s||s==best_s&&j>best_j&&s<best_t))
{
best_i=i;
best_j=j;
best_s=s;
best_t=t;
}
if(best_s)
break;
}
printf("%d %d %d %d\n",best_j+1,best_s,best_i-best_j,best_t);
}
return 0;
}
5
#include<stdio.h>
char a[44];
int cases,inf,n,m,len,total,ones,solutions;
void go(int i)
{
int j,k,tmp_len,all_ones;
if(total>n||ones>m||solutions>1)
return;
if(i>=len)
{
if(total+ones==n+m)
solutions++;
return;
}
if(a[i]=='1')
for(j=i,k=0,all_ones=1;j<len;j++)
{
if(k<inf)
k=k*2+a[j]-'0';
all_ones&=a[j]-'0';
if(a[j+1]!='1')
{
if(k>2)
{
total+=k;
ones+=k;
go(j+1);
total-=k;
ones-=k;
}
if(all_ones&&j-i<2)
{
tmp_len=j-i+1;
total+=tmp_len;
ones+=tmp_len;
go(j+1);
total-=tmp_len;
ones-=tmp_len;
}
}
}
else
{
total++;
go(i+1);
total--;
}
}
int main()
{
inf=99999;
while(1)
{
scanf("%d%d",&n,&m);
if(n==0&&m==0)
break;
scanf("%s",a);
for(len=0;a[len]>' ';len++);
total=0;
ones=0;
solutions=0;
go(0);
printf("Case #%d: %s\n",++cases,solutions?solutions-1?"NOT UNIQUE":"YES":"NO");
}
return 0;
}
6
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<string>
using namespace std;
#define PB push_back
char ch[7];
map<char,int> T;
string AnswerM,AnswerH;
int AnswerShaft,AnswerGear;
int N,R;
bool used[7];
int Time(string s)
{
int Rs=R,Rt=1,lasT;
for(int i=1;i<s.size();i++)
{
if(s[i]=='-');
else if(s[i-1]=='-')
{
Rs *=-lasT;
Rt *=T[s[i]];
lasT = T[s[i]];
}
else
lasT=T[s[i]];
}
if(Rs%Rt==0)
return Rs/Rt;
else
return 0;
}
void Refresh(string sm,string sh,int shaft,int gear)
{
if(AnswerM=="X")
{
AnswerM=sm;
AnswerH=sh;
AnswerShaft=shaft;
AnswerGear=gear;
return;
}
string sold,snew;
sold.clear();snew.clear();
for(int i=0;i<AnswerM.size();i++)
if(AnswerM[i]!='*'&&AnswerM[i]!='-')
sold.PB(AnswerM[i]);
for(int i=0;i<AnswerH.size();i++)
if(AnswerH[i]!='*'&&AnswerH[i]!='-')
sold.PB(AnswerH[i]);
for(int i=0;i<sm.size();i++)
if(sm[i]!='*' && sm[i]!='-')
snew.PB(sm[i]);
for(int i=0;i<sh.size();i++)
if(sh[i]!='*' && sh[i]!='-')
snew.PB(sh[i]);
if(shaft<AnswerShaft)
{
AnswerM=sm;AnswerH=sh;
AnswerShaft=shaft;AnswerGear=gear;
}
else if(shaft==AnswerShaft && gear<AnswerGear)
{
AnswerM=sm;AnswerH=sh;
AnswerShaft=shaft;AnswerGear=gear;
}
else if(shaft==AnswerShaft && gear==AnswerGear && snew<sold)
{
AnswerM=sm;AnswerH=sh;
AnswerShaft=shaft;AnswerGear=gear;
}
}
void Dfs(string sm,string sh,int shaft,int gear)
{
if(sm.size()==3 || sh.size()==3)
return ;
if(sm.size()>=4&&sm[sm.size()-1]!='-'&&sm[sm.size()-2]!='-'&&sm[sm.size()-3]!='-')
return;
if(sh.size()>=4&&sh[sh.size()-1]!='-'&&sh[sh.size()-2]!='-'&&sh[sh.size()-3]!='-')
return;
if(Time(sm)==24 && Time(sh)==2)
Refresh(sm,sh,shaft,gear);
else if(Time(sm)==24)
{
if(sm.size()>=3&&sm[sm.size()-2]!='-')
return;
for(int i=1;i<=N;i++)
if(!used[i])
{
used[i]=true;
Dfs(sm,sh+ch[i],shaft,gear+1);
if(sh.size()>1)
Dfs(sm,sh+'-'+ch[i],shaft+1,gear+1);
used[i]=false;
}
}
else
{
for(int i=1;i<=N;i++)
if(!used[i])
{
used[i]=true;
Dfs(sm,sh+ch[i],shaft,gear+1);
if(sh.size()>1)
Dfs(sm,sh+'-'+ch[i],shaft+1,gear+1);
used[i]=false;
}
}
}
void Dfs(string s,int shaft,int gear)
{
if(s.size()==3)
return;
if(s.size()>=4 && s[s.size()-1]!='-'&&s[s.size()-2]!='-'&&s[s.size()-3]!='-')
return;
if(shaft>AnswerShaft||(shaft==AnswerShaft&&gear>AnswerGear))
return;
Dfs(s,s,shaft,gear);
for(int i=1;i<=N;i++)
if(!used[i])
{
used[i]=true;
Dfs(s+ch[i],shaft,gear+1);
if(s.size()>1)
Dfs(s+'-'+ch[i],shaft+1,gear+1);
used[i]=false;
}
}
int main()
{
int Case=0;
while(cin>>N &&N)
{
if(Case>0)
cout<<"\n";
cin>>R;
int x;
for(int i=1;i<=N;i++)
used[i]=false;
for(int i=1;i<=N;i++)
{
cin>>ch[i]>>x;
T[ch[i]]=x;
}
AnswerM='X';AnswerH='X';
AnswerShaft=100000000,AnswerGear=100000000;
Dfs("*",1,0);
if(AnswerM=="X")
cout<<"Trial "<<++Case<<" IS IMPOSSIBLE\n";
else
cout<<"Trial "<<++Case<<"\nMinutes: "<<AnswerM<<"\nHours: "<<AnswerH<<"\n";
}
return 0;
}
7
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int MaxP=200*50;
char s[20];
int n,m,i,j,k,P,sum,delta,min;
int list[50][2];
int a[MaxP+1];
int main()
{
while(scanf("%d",&n)&&n)
{
sum=0;P=0;
for(i=0;i<n;i++)
{
scanf("%s %d",s,&m);
if(s[0]=='C')
continue;
if(s[0]=='P')
P+=m;
else
{
if(P&&sum)
{
list[sum][0]=2;
list[sum][1]=P;
sum++;
}
if(s[0]=='I')
list[sum][0]=0;
else
list[sum][0]=1;
list[sum][1]=m;
sum++;
P=0;
}
}
memset(a,0,sizeof(a));
delta=0;min=0;P=0;
for(i=0;i<sum;i++)
{
if(list[i][0]==0)
delta+=list[i][1];
if(list[i][0]==1)
delta-=list[i][1];
if(min>delta)
min=delta;
if(list[i][0]!=2)
continue;
P++;
for(j=1;j<=list[i][1];j++)
if(j>delta&&list[i][1]%j==0)
a[j-delta]++;
}
if(P==0)
printf("SIZE >= %d\n",1-min);
else
{
k=0;
for(i=1-min;i<=MaxP;i++)
if(a[i]==P)
{
if(k)
printf(" ");
k=i;
printf("%d",k);
}
if(!k)
printf("IMPOSSIBLE");
printf("\n");
}
}
return 0;
}