A - Raise Both Hands 若举只左手举则输出yes,若只右手举则输出no,其他情况输出Invalid。

#include <bits/stdc++.h>
#define int long long

using namespace std;

signed main()
{
	int a,b;
	cin>>a>>b;
	if(a==1&&b==0)
	{
		cout<<"Yes\n";
	}
	else if(a==0&&b==1)
	{
		cout<<"No\n";
	}
	else
	{
		cout<<"Invalid\n";
	}
	return 0;
}

B - Binary Alchemy 按照题目模拟操作。

#include <bits/stdc++.h>
#define int long long

using namespace std;
int a[1000][1000];
signed main()
{
	int n;
	cin>>n;
	
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=i;j++)
		{
			int t;
			cin>>t;
			a[i][j]=t;
		}
		
	}
	int t=1;
	for(int i=1;i<=n;i++)
	{
		if(t>=i)
		{
			t=a[t][i];
		}
		else
		{
			t=a[i][t];
		}
	}
	cout<<t;
	return 0;
}

C - Word Ladder 为了使最后的t字典序最小,则需要先改字典序变小的,再改字典序变大的。第一步操作从左向右遍历,第二个操作从右向左操作,从而使t的字典序最小。

#include <bits/stdc++.h>
#define int long long

using namespace std;
int a[1000][1000];
signed main()
{
	string s;
	string t;
	cin>>s>>t;
	int n=t.size();
	vector<int> k(n);
	vector<string> a;
	for(int i=0;i<n;i++)
	{
		if(s[i]>t[i])
		{
			k[i]=1;
		}
		else if(s[i]<t[i])
		{
			k[i]=2;
		}
		else
		{
			k[i]=0;
		}
	}
	string tt=s;
	for(int i=0;i<n;i++)
	{
		if(k[i]==1)
		{
			tt[i]=t[i];
			a.push_back(tt);
		}
	}
	for(int i=n-1;i>=0;i--)
	{
		if(k[i]==2)
		{
			tt[i]=t[i];
			a.push_back(tt);
		}
	}
	cout<<a.size()<<endl;
	for(int i=0;i<a.size();i++)
	{
		cout<<a[i]<<endl;
	}
	return 0;
}

D - Cross Explosion 对行和列分别设一个vector,对于一个x,y,分别删去a[x]的y,b[y]的x。如果这个点一斤删去,则二分查找行和列的前一个点和后一个点。ans为总共的点数,每删去一个数则ans--,最后输出ans。

#include <bits/stdc++.h>
#define int long long

using namespace std;

signed main()
{
	int h,w,q;
	cin>>h>>w>>q;
	vector<set<int>> a(h),b(w);
	int ans=h*w;
	for(int i=0;i<w;i++)
	{
		for(int j=0;j<h;j++)
		{
			a[j].insert(i);
			b[i].insert(j);
		}
	}
	while(q--)
	{
		int x,y;
		cin>>x>>y;
		x--;
		y--;
		if(a[x].find(y)!=a[x].end())
		{
			a[x].erase(y);
			b[y].erase(x);
			ans--;
		}
		else
		{
			auto it=a[x].lower_bound(y);
			if(it!=a[x].begin())
			{
				int tt=*(prev(it));
				a[x].erase(tt);
				b[tt].erase(x);
				ans--;
			}
			if(it!=a[x].end())
			{
				a[x].erase(*it);
				b[*it].erase(x);
				ans--;
			}
			
			
			
			it=b[y].lower_bound(x);
			if(it!=b[y].begin())
			{
				int tt=*(prev(it));
				a[tt].erase(y);
				b[y].erase(tt);
				ans--;
			}
			if(it!=b[y].end())
			{
				a[*it].erase(y);
				b[y].erase(*it);
				ans--;
			}
		}
	}
	cout<<ans;
	return 0;
}