2022杭电第七场

1004 Black Magic

题意

有(0,0),(0,1),(1,0),(1,1)四种方块。相邻的方块间连接的是黑色的,则看作是联通的。求联通块的最大最小数量。

思路

最小的情况是,(1,1)连在一起,左右两边用(0,1),(1,0)连成一个连通块,剩下的(0,1)(1,0)连接。 最大的情况是,我们将所有的(1,0) 放在最左边,再将所有的 (0,1)放在最右边,再尽量用(1,1) 将 (0,0) 隔开即可

代码

#include<bits/stdc++.h>
using namespace std;
int e,l,r,b,t;
int ma(int e,int l,int r,int b){
	int f=0,ans=0;
	if(b>0) {
		f=1;
	if(l>=1) l=l-1;
	if(r>=1) r=r-1;
	}
	ans=f+min(l,r)+abs(l-r)+e;
	return ans;
}
int mi(int e,int l,int r,int b){
	int num=(b-e-1>0) ? (b-e-1) : 0;
	int ma=e+l+r+b-num;
	return ma;
}
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d%d%d%d",&e,&l,&r,&b);
		int ans1=ma(e,l,r,b);
		int ans2=mi(e,l,r,b);
		printf("%d %d\n",ans1,ans2);
	}
	return 0;
}

1008 Triangle Game

题意

给你三条边,边长分别为 a , b , c 。现 Kate 和 Emilico 二人做游戏,每轮需要令三角形的一边长度减去一正整数,使这个三角形退化的一方负。Kate 先手,双方均采用最优策略,问 Kate 是否会获胜。

思路

三堆石子数减一的nim博弈。

代码


#include<bits/stdc++.h>
#define ll long long
#define int long long
#define endl "\n"
#define P pair<int,int>
#define f first
#define s second
using namespace std;
const int inf = 0x3f3f3f3f;
int t;
int n,m,k;
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>t;
    while(t--)
    {
        int a,b,c;
        cin>>a>>b>>c;
        if(((a-1)^(b-1)^(c-1))!=0)
            cout<<"Win"<<endl;
        else
            cout<<"Lose"<<endl;
    }
    return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务