ABC421
比赛传送门:https://atcoder.jp/contests/abc421
评价:D 题想 10min 出结果,然后代码一直搞不出来,吹了一天空调脑袋痛死了,然后 30min 干掉 A,B,C 之后就去洗澡了。
D 超级无敌屎山大分讨论,代码估计有 100 行+,懒得改了。。。
A
简单数组题。让我们欣赏 @Herbie_ZHB 大佬在公交车上写出来的代码吧!
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=105;
int n ,x;
string y,s[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i];
}
cin>>x>>y;
if(s[x]==y){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
return 0;
}
B
这个 \(f(x)\) 函数直接把 \(x\) 的每一位提取出来然后倒转一下就好了,下次还填非常简单.jpg
//I LOVE Neuvillette Forever!!!111
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
constexpr int N=211;
ll x,y,a[N];
inline ll f(ll a)
{
ll b=0;
while(a)
{
b=b*10+(a%10);
a/=10;
}
return b;
}
int main()
{
// freopen("neuvillette.in","r",stdin);
// freopen("neuvillette.out","w",stdout);
cin>>x>>y;
a[1]=x,a[2]=y;
for(int i=3;i<=10;i++) a[i]=f(a[i-1]+a[i-2]);
cout<<a[10];
return 0;
}
C
问题的本质就是求把一个字符串变成 ABABAB... 或 BABABA... 所要的最小步数,然后在这两个最小步数里面取个最小值。
考虑变成 ABABAB...:该串第 \(k\) 个 B 的下标为 \(2k\)。
不管 A,只考虑 B,我们让 B 跑到最终串的位置上。对于第 \(k\) 个 \(s_i=\tt B\) 的下标 \(i\),我们要让这个 B 蹦到第 \(k\) 个位置上也就是 \(2k\) 这个位置上,需要花费 \(|2k-i|\) 的操作。变成 BABABA... 也同理。
//I LOVE Alhaitham Forever!!!111
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
constexpr int N=-1;
int n;
ll ans1,ans2;
int main()
{
// freopen("neuvillette.in","r",stdin);
// freopen("neuvillette.out","w",stdout);
cin>>n;n*=2;
string s;
cin>>s;
s=" "+s;
int idx1=1,idx2=2;
for(int i=1;i<=n;i++) //匹配到ABABAB,B出现的下标1,3,5,7...
{
if(s[i]=='B')
{
ans1+=abs(idx1-i);
idx1+=2;
}
}
for(int i=1;i<=n;i++) //匹配到BABABA,B出现的下标2,4,6,8,10...
{
if(s[i]=='B')
{
ans2+=abs(idx2-i);
idx2+=2;
}
}
cout<<min(ans1,ans2);
return 0;
}
/*
问题的本质就是把一个字符串变成ABABAB/BABABA所要的最小步数
不管A,只考虑B,让B跑到最终串的位置上
AABBBA
ABABAB
AAABBB
ABABAB
*/

浙公网安备 33010602011771号