zoukankan      html  css  js  c++  java
  • CF3

    A

    A

    直接(Baidu First Search)

    #include<bits/stdc++.h>
    using namespace std;
    namespace red{
    #define y1 qwq
    #define int long long
    #define eps (1e-6)
    	inline int read()
    	{
    		int x=0;char ch,f=1;
    		for(ch=getchar();(ch<'0'||ch>'9')&&ch!='-';ch=getchar());
    		if(ch=='-') f=0,ch=getchar();
    		while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    		return f?x:-x;
    	}
    	string st,ed;
    	struct node
    	{
    		int x,y,f;
    	};
    	queue<node> q;
    	int dx[]={0,-1,1,0,0,-1,1,1,-1},dy[]={0,0,0,-1,1,-1,1,-1,1};
    	string s[]={"Q","U","D","L","R","LU","RD","LD","RU"};
    	int g[20][20];
    	inline void bfs(int stx,int sty,int edx,int edy)
    	{
    		stx=8-stx+1,edx=8-edx+1;
    		q.push((node){stx,sty,0});
    		g[stx][sty]=-1;
    		while(!q.empty())
    		{
    			node now=q.front();
    			q.pop();
    			int x=now.x,y=now.y;
    			if(x==edx&&y==edy)
    			{
    				cout<<now.f<<endl;
    				while(~g[x][y])
    				{
    					cout<<s[g[x][y]]<<endl;
    					int t=g[x][y]&1?g[x][y]+1:g[x][y]-1;
    					x+=dx[t],y+=dy[t];
    				}
    				return;
    			}
    			for(int k=1;k<=8;++k)
    			{
    				int tx=x+dx[k],ty=y+dy[k];
    				if(tx<1||tx>8||ty<1||ty>8) continue;
    				if(g[tx][ty]) continue;
    				g[tx][ty]=k;
    				q.push((node){tx,ty,now.f+1});
    			}
    		}
    	}
    	inline void main()
    	{
    		cin>>st>>ed;
    		bfs(st[1]-'0',st[0]-'a'+1,ed[1]-'0',ed[0]-'a'+1);
    	}
    }
    signed main()
    {
    	red::main();
    	return 0;
    }
    

    B

    B

    我脑残我脑残

    把重量为(1)的物品和重量为(2)的物品分类,从小到大排序

    然后枚举用几个重量为(1)的物品

    #include<bits/stdc++.h>
    using namespace std;
    namespace red{
    #define y1 qwq
    #define int long long
    #define eps (1e-6)
    	inline int read()
    	{
    		int x=0;char ch,f=1;
    		for(ch=getchar();(ch<'0'||ch>'9')&&ch!='-';ch=getchar());
    		if(ch=='-') f=0,ch=getchar();
    		while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    		return f?x:-x;
    	}
    	const int N=1e5+10;
    	int n,m;
    	int ret,numa,numb;
    	int st[N],top;
    	int tota,totb;
    	int sa[N],sb[N];
    	struct point
    	{
    		int val,id;
    		inline bool operator < (const point &t) const
    		{
    			return val>t.val;
    		}
    	}a[N],b[N];
    	inline void main()
    	{
    		n=read(),m=read();
    		for(int x,y,i=1;i<=n;++i)
    		{
    			x=read(),y=read();
    			if(x==1) a[++tota].val=y,a[tota].id=i;
    			else b[++totb].val=y,b[totb].id=i;
    		}
    		sort(a+1,a+tota+1);
    		sort(b+1,b+totb+1);
    		for(int i=1;i<=tota;++i) sa[i]=sa[i-1]+a[i].val;
    		for(int i=1;i<=totb;++i) sb[i]=sb[i-1]+b[i].val;
    		for(int i=0;i<=min(m,tota);++i)
    		{
    			int sumb=min((m-i)>>1,totb);
    			if(sa[i]+sb[sumb]>ret)
    			{
    				ret=sa[i]+sb[sumb];
    				numa=i;
    				numb=sumb;
    			}
    		}
    		for(int i=1;i<=numa;++i) st[++top]=a[i].id;
    		for(int i=1;i<=numb;++i) st[++top]=b[i].id; 
    		printf("%lld
    ",ret);
    		sort(st+1,st+top+1);
    		for(int i=1;i<=top;++i) printf("%lld
    ",st[i]);
    	}
    }
    signed main()
    {
    	red::main();
    	return 0;
    }
    //qnmd
    

    C

    C

    淦,毒瘤模拟

    考虑很多不合法情况:

    1.第一个人比第二个人多2个以上

    2.第二个人比第一个人多

    3.两个人都赢了

    4.一个人赢两次(包括有两行或两列,一个人有两个点赢了超过两次但交点超过两个)

    5.某个人赢了另一个人还走了下一步

    然后其他情况应该比较好判断

    #include<bits/stdc++.h>
    using namespace std;
    namespace red{
    #define y1 qwq
    #define int long long
    #define eps (1e-6)
    	inline int read()
    	{
    		int x=0;char ch,f=1;
    		for(ch=getchar();(ch<'0'||ch>'9')&&ch!='-';ch=getchar());
    		if(ch=='-') f=0,ch=getchar();
    		while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    		return f?x:-x;
    	}
    	char s[5][5];
    	int sum1,sum2;
    	bool flag1,flag2;
    	int d1[5][5],d2[5][5];
    	inline void main()
    	{
    		for(int i=1;i<=3;++i) scanf("%s",s[i]+1);
    		for(int i=1;i<=3;++i)
    		{
    			for(int j=1;j<=3;++j)
    			{
    				if(s[i][j]=='X') ++sum1;
    				if(s[i][j]=='0') ++sum2;
    			}
    		}
    		if(sum1-sum2>1||sum2>sum1)
    		{
    			puts("illegal");return;
    		}
    		for(int i=1;i<=3;++i)
    		{
    			int sa=0,sb=0;
    			for(int j=1;j<=3;++j)
    			{
    				if(s[i][j]=='X') ++sa;
    				if(s[i][j]=='0') ++sb;
    			}
    			if(flag1&&sa==3){puts("illegal");return;}
    			if(flag2&&sb==3){puts("illegal");return;}
    			flag1|=(sa==3),flag2|=(sb==3);
    			if(sa==3) for(int j=1;j<=3;++j) ++d1[i][j];
    			if(sb==3) for(int j=1;j<=3;++j) ++d2[i][j];
    		}
    		bool q1=0,q2=0;
    		for(int i=1;i<=3;++i)
    		{
    			int sa=0,sb=0;
    			for(int j=1;j<=3;++j)
    			{
    				if(s[j][i]=='X') ++sa;
    				if(s[j][i]=='0') ++sb;
    			}
    			if(q1&&sa==3){puts("illegal");return;}
    			if(q2&&sb==3){puts("illegal");return;}
    			q1|=(sa==3),q2|=(sb==3);
    			if(sa==3) for(int j=1;j<=3;++j) ++d1[j][i];
    			if(sb==3) for(int j=1;j<=3;++j) ++d2[j][i];
    		}
    		flag1|=q1,flag2|=q2;
    		int sa=0,sb=0;
    		for(int i=1;i<=3;++i)
    		{
    			if(s[i][i]=='X') ++sa;
    			if(s[i][i]=='0') ++sb;
    		}
    		flag1|=(sa==3),flag2|=(sb==3);
    		if(sa==3) for(int i=1;i<=3;++i) ++d1[i][i];
    		if(sb==3) for(int i=1;i<=3;++i) ++d2[i][i];
    		sa=sb=0;
    		for(int i=1;i<=3;++i)
    		{
    			sa+=(s[i][3-i+1]=='X');
    			sb+=(s[i][3-i+1]=='0');
    		}
    		flag1|=(sa==3),flag2|=(sb==3);
    		if(sa==3) for(int i=1;i<=3;++i) ++d1[i][3-i+1];
    		if(sb==3) for(int i=1;i<=3;++i) ++d2[i][3-i+1];
    		int tot1=0,tot2=0;
    		for(int i=1;i<=3;++i)
    		{
    			for(int j=1;j<=3;++j)
    			{
    				if(d1[i][j]>1) ++tot1;
    				if(d2[i][j]>1) ++tot2;
    			}
    		}
    		if((flag1&&flag2)||(tot1>1)||(tot2>1))
    		{
    			puts("illegal");return;
    		}
    		if((flag2&&sum1>sum2)||(flag1&&sum1==sum2))
    		{
    			puts("illegal");return;
    		}
    		if(flag1)
    		{
    			puts("the first player won");
    			return;
    		}
    		if(flag2)
    		{
    			puts("the second player won");
    			return;
    		}
    		if(sum1+sum2==9)
    		{
    			puts("draw");
    			return;
    		}
    		if(sum1==sum2)
    		{
    			puts("first");
    			return;
    		}
    		if(sum1>sum2)
    		{
    			puts("second");
    			return;
    		}
    	}
    }
    signed main()
    {
    	red::main();
    	return 0;
    }
    

    D

    D

    先都把括号看作右括号,然后将(a[i]-b[i])扔进堆,然后遇到左括号就 (++sum),否则(--sum)

    如果(sum<0),那么从堆顶取一个元素出来代替右括号,(sum+=2)

    如果最后(sum!=0)或者某次堆顶没有元素则无解

    #include<bits/stdc++.h>
    using namespace std;
    namespace red{
    #define y1 qwq
    #define int long long
    #define eps (1e-6)
    	inline int read()
    	{
    		int x=0;char ch,f=1;
    		for(ch=getchar();(ch<'0'||ch>'9')&&ch!='-';ch=getchar());
    		if(ch=='-') f=0,ch=getchar();
    		while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    		return f?x:-x;
    	}
    	const int N=1e5+10;
    	struct node
    	{
    		int val,pos;
    		inline bool operator < (const node &t) const
    		{
    			return val>t.val;
    		}
    	};
    	priority_queue<node> q;
    	char s[N];
    	int n,m,sum;
    	int ret;
    	int g[N];
    	inline void main()
    	{
    		scanf("%s",s+1);
    		n=strlen(s+1);
    		sum=0;
    		for(int x,y,i=1;i<=n;++i)
    		{
    			if(s[i]=='(') ++sum,g[i]=2;
    			else --sum,g[i]=3;
    			
    			if(s[i]=='?')
    			{
    				x=read(),y=read();
    				ret+=y;
    				q.push((node){x-y,i});
    			}
    			
    			if(sum<0)
    			{
    				if(q.empty()) {ret=-1;break;}
    				sum+=2;
    				node t=q.top();
    				q.pop();
    				g[t.pos]=2;
    				ret+=t.val;
    			}
    		}
    		if(ret==-1||sum)
    		{
    			puts("-1");
    			return;
    		}
    		printf("%lld
    ",ret);
    		for(int i=1;i<=n;++i)
    		{
    			putchar(g[i]==2?'(':')');
    		}
    	}
    }
    signed main()
    {
    	red::main();
    	return 0;
    }
    /*
    kkk
    */
    
  • 相关阅读:
    过河卒(Noip2002)
    暑假学习日记2013/7/18
    暑假学习日记2013/7/16
    iOS中利用CoreTelephony获取用户当前网络状态(判断2G,3G,4G) by徐文棋
    隐藏键盘的N种方法
    cell重用
    关于viewControllers之间的传值方式
    iOS开发之工欲善其事,必先利其器
    NSLog输出格式及随机数
    iOS团队代码规范
  • 原文地址:https://www.cnblogs.com/knife-rose/p/12230409.html
Copyright © 2011-2022 走看看