题目链接
因为技术问题,这round排名崩了不算分,那就先来更新ABC题吧
A. Dasha and Stairs
很多人被hacked应该是没有考虑a、b同时为0的情况,我也没注意啊
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 100050;
typedef long long int ll;
int san[250],ke[250];
int main()
{
int a,b;
cin>>a>>b;
int ok = 1;
if(abs(a-b)>1)ok = 0;
else ok = 1;
if(a==0 && b==0)ok = 0;
if(ok)printf("YES\n");
else printf("NO\n");
return 0;
}
B. Dasha and friends
这题数据太弱了,以至于可以用枚举来解决,是一道很好的思路题,官方还没更题解,也还没看大神的代码,两个人起点的距离范围肯定在[-L,L],通过距离修正坐标,然后排序再进行匹配,很蠢的方法,不过数据这么小这样做能过
先贴我AC的代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 100050;
typedef long long int ll;
int san[250],ke[250];
int main()
{
int n,L;
cin>>n>>L;
for(int i=0;i<n;++i)cin>>ke[i];
for(int i=0;i<n;++i)cin>>san[i];
sort(ke,ke+n);
sort(san,san+n);
int ok = 0,t = 0,juli = maxn;
for(juli = -L;juli <= L;++juli)
{
int a[250];
for(int i=0;i<n;++i)a[i] = (ke[i] + juli) % L;
sort(a,a+n);
ok = 1;
for(int i=0;i<n;++i)
{
// printf("%d ",a[i]);
if(a[i]!=san[i]){
ok=0;//break;
}
}
if(ok){printf("YES\n");return 0;}
}
printf("NO\n");
return 0;
}
C. Dasha and Password
直接开数组存,每组存下三个值,n组字符串,每组拿到字符,数字,符号需要的最小次数,数据这么弱直接三重循环枚举更新答案
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <queue>
using namespace std;
const int maxn = 1000050;
typedef long long int ll;
char s[70][150];
int mval[70][3];
int main()
{
// freopen("in.txt","r",stdin);
int n,m;
scanf("%d %d",&n,&m);
for(int i=0;i<n;++i)
scanf("%s",s[i]);
for(int i=0;i<70;++i)
mval[i][0]= mval[i][1]= mval[i][2] = maxn;
for(int i=0;i<n;++i)
{
for(int j=0;j<m;++j)
{
if(s[i][j]=='#' || s[i][j]=='*' || s[i][j]=='&')
mval[i][2] = min( min(j,m-j),mval[i][2]);
else if(s[i][j]<='9' && s[i][j]>='0')
mval[i][0] = min( min(j,m-j),mval[i][0]);
else if(s[i][j]<='z' && s[i][j]>='a')
mval[i][1] = min( min(j,m-j),mval[i][1]);
}
}
// for(int i=0;i<n;++i)
// printf("%d %d %d\n",mval[i][0],mval[i][1],mval[i][2]);
int ans = 1e9;
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
{
if(i==j)continue;
for(int k=0;k<n;++k)
{
if(i==k || j==k)continue;
ans = min(ans,mval[i][0]+mval[j][1]+mval[k][2]);
ans = min(ans,mval[i][0]+mval[j][2]+mval[k][1]);
ans = min(ans,mval[i][1]+mval[j][0]+mval[k][2]);
ans = min(ans,mval[i][1]+mval[j][2]+mval[k][0]);
ans = min(ans,mval[i][2]+mval[j][0]+mval[k][1]);
ans = min(ans,mval[i][2]+mval[j][1]+mval[k][0]);
}
}
}
printf("%d\n",ans);
return 0;
}