- snby 的博客
ABC370 9/7
- 2024-9-8 22:59:48 @
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;
}