1536: Bit String Reordering
#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
#include<ctype.h>
#include<cstring>
#include<stdlib.h>
#include<algorithm>
using namespace std;
const int MAXN=20;
int n,m,result;
int a[MAXN],temp[MAXN],b[MAXN],vis[1000000];
struct node
{
int res;
int step;
int num[MAXN];
}s1,s2;
queue<node> Q;
int calc(int num[])
{
int ans=0,ok=1;
for(int i=n-1;i>=0;i--)
{
ans+=ok*num[i];
ok*=2;
}
return ans;
}
int BFS()
{
node now,next;
while(!Q.empty())
{
now=Q.front();
Q.pop();
if(now.res==result) return now.step;
for(int i=0;i<n;i++) next.num[i]=now.num[i];
for(int i=0;i<n-1;i++)
{
swap(next.num[i],next.num[i+1]);
next.res=calc(next.num);
if(!vis[next.res])
{
vis[next.res]=1;
next.step=now.step+1;
Q.push(next);
}
swap(next.num[i],next.num[i+1]);
}
}
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int i=0;i<m;i++) scanf("%d",&temp[i]);
int cnt=0,flag=1;
for(int i=0;i<m;i++)
{
for(int j=0;j<temp[i];j++)
s1.num[cnt++]=flag;
flag=!flag;
}
s1.res=calc(s1.num);
s1.step=0;
Q.push(s1);
vis[s1.res]=1;
cnt=0,flag=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<temp[i];j++)
s2.num[cnt++]=flag;
flag=!flag;
}
s2.res=calc(s2.num);
s2.step=0;
Q.push(s2);
vis[s2.res]=1;
result=calc(a);
int ans=BFS();
printf("%d\n",ans);
return 0;
}
#include<iostream>
#include<cstdio>
#include<stack>
#include<cstring>
#include<string>
using namespace std;
const int N=105;
int main()
{
char c[N];
char c1[N];
int k;
stack<int> s;
while(~scanf("%s",c))
{
bool kk1=0,kk2=0;
cin>>k;
int len=strlen(c);
for(int i=0;i<len;i++)
{
if(i%2==0)
s.push(c[i]-'0');
else
{
if(c[i]=='*')
{
i++;
int temp=s.top();
temp*=c[i]-'0';
s.pop();
s.push(temp);
}
}
}
int ans=0;
while(!s.empty())
{
ans+=s.top();
s.pop();
}
if(ans==k)
kk1=1;
ans=c[0]-'0';
for(int i=1;i<len;i+=2)
{
if(c[i]=='*')
ans*=c[i+1]-'0';
else
ans+=c[i+1]-'0';
}
if(ans==k)
kk2=1;
if(kk1&&kk2)
cout<<"U"<<endl;
else if(!kk1&&kk2)
cout<<"L"<<endl;
else if(!kk1&&!kk2)
cout<<"I"<<endl;
else
cout<<"M"<<endl;
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=505;
struct node
{
int l,r;
bool operator <(const node& A) const
{
return l<A.l;
}
}a[N];
int n,m;
int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<m;i++)
{
scanf("%d%d",&a[i].l,&a[i].r);
}
sort(a,a+m);
int ans=n+1;
int maxv=a[0].r,minv=a[0].l;
for(int i=1;i<m;i++)
{
if(a[i].l>maxv)
{
ans+=2*(maxv-minv);
maxv=a[i].r;
minv=a[i].l;
}
else
maxv=max(maxv,a[i].r);
}
ans+=2*(maxv-minv);
cout<<ans<<endl;
}
return 0;
}
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#define maxn 20000
#define inf 0x3f3f3f
using namespace std;
struct node
{
double x,y;
}p[maxn];
double Min(double a,double b)
{
if(a>b) return b;
else return a;
}
double Max(double a,double b)
{
if(a>b) return a;
else
return b;
}
int main()
{
int n,b;
double d;
while(scanf("%lf%d%d",&d,&n,&b)!=EOF)
{
double m=inf;
for(int i=1;i<=n;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
for(int j=0;j<=b;j++)
{
double mi=0;
double l=d/(double)(j+1);
double miao=l/4.0;
double tmp=sqrt((l*l/(8.0*miao))+2*miao);
for(int i=1;i<=n;i++)
{
int tmp=p[i].x/l;
double xx=p[i].x-(double)tmp*l;
double ans1=(xx-l/2.0)*(xx-l/2.0);
ans1=(ans1*4.0)/(l*l);
ans1=1-ans1;
ans1=p[i].y/ans1;
double temp=sqrt((l*l/(8.0*ans1))+2*ans1);
mi=Max(ans1,mi);
}
mi=Max(mi,l/4.0);
double res=sqrt((l*l/(8.0*mi))+2*mi);
m=Min(m,res);
}
printf("%.6lf\n",m);
}
}