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;
}