CSU 1536: Bit String Reordering 1537: Miscalculation 1538: Shopping 1539: Space Golf

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;//01串代表的数字
    int step;//步数
    int num[MAXN];//01串
}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]);//交换相邻的两位生成新的01串
            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;
}
/**********************************************************************
	Problem: 1536
	User: 3901140225
	Language: C++
	Result: AC
	Time:8 ms
	Memory:6056 kb
**********************************************************************/

1537: Miscalculation

#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;
}
/**********************************************************************
	Problem: 1537
	User: 3901140225
	Language: C++
	Result: AC
	Time:4 ms
	Memory:2024 kb
**********************************************************************/

1538: Shopping

#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;
}
/**********************************************************************
	Problem: 1538
	User: 3901140225
	Language: C++
	Result: AC
	Time:4 ms
	Memory:2028 kb
**********************************************************************/
#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);
		
	}
}


/**********************************************************************
	Problem: 1539
	User: 3901140225
	Language: C++
	Result: AC
	Time:8 ms
	Memory:2348 kb
**********************************************************************/


猜你喜欢

转载自blog.csdn.net/nameofcsdn/article/details/80285880
BIT