SMU Summer 2024 Contest Round 5
1.Robot Takahashi
原题链接:
http://162.14.124.219/contest/1009/problem/A
将体重从小到大排序,再正序计算0的个数的前缀和,倒序计算1的个数后缀和,遍历X的位置找出最大值,注意如果相邻两体重不相同再计数
查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,sx,sy,fx,fy;
struct node{
int p;
int q;
}a[1000000];
int q0[1000000],h1[1000000];
string s;
bool cmp(node x,node y)
{
return x.p<y.p;
}
signed main()
{
cin>>n;
cin>>s;
int res=1;
for(int i=1;i<=n;i++) {
cin >> a[i].p;
a[i].q=s[i-1]-'0';
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
q0[i]=q0[i-1]+(a[i].q==0?1:0);
}
for(int i=n;i>=1;i--)
{
h1[i]=h1[i+1]+(a[i].q==1?1:0);
}
int ma=0;
for(int i=0;i<=n;i++)
{
if(a[i].p!=a[i+1].p)
ma=max(q0[i]+h1[i+1],ma);
}
cout<<ma;
return 0;
}
2.Connect 6
原题链接:
http://162.14.124.219/contest/1009/problem/B
在每个点遍历4个方向的6个位置,判断其中是否存在少于等于2个空白点,只要存在一个符合条件的就输出Yes
查看代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
int dx[4]={0,1,1,-1},dy[4]={1,0,1,1};
signed main(){
cin>>n;
vector<string> s(n);
for(int i=0;i<n;i++)
{
cin>>s[i];
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
for(int k=0;k<4;k++)
{
int x=i,y=j;
int biao=0;
for(int g=0;g<6;g++)
{
if (x >= n || x < 0 || y >= n || y < 0)
{
biao =999;
break;
}
if(s[x][y]=='.')biao++;
x+=dx[k],y+=dy[k];
}
if(biao<=2)
{
cout<<"Yes"<<endl;
return 0;
}
}
}
}
cout<<"No"<<endl;
return 0;
}