Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2)
闲话:lzw牛逼!这场上青了,b题我反复读读不懂,靠两个队友给我解释。最后也是懵懵懂懂且fst了,还好我及时跑去切c,总的来说abcd都不难,手速场。
重复一遍 lzw牛逼!
A. Digits Sum
题意
定义函数S(X)表示正整数x各项之和,若S(X)>S(X+1)则称x为interesting。给出n问1<=x<=n且x是interesting的这样子的x的个数。
题解
很明显只有在进位的时候才会产生interesting的情况,因此(n+1)/10即可。
code
int main()
{
ll n;cin>>n;
while(n--){
ll d;cin>>d;
d+=1;
cout<<d/10<<'\n';
}
return 0;
}
B. Reverse String
题意
给两个字符串s和t。对s进行扫描能否得到t。扫描指:选择一个位置开始向右扫描若干次,再向左扫描若干次,每次扫描的那个位置对应的字符记录下来,最后得到一串字符,即是扫描得到的字符。
题解
s长度最大500,考虑直接暴力扫描,从0开始向右扫i个再向左扫到0,那么如果存在答案,t一定是某个i扫描后的结果的子串。
代码参考了这位up的,觉得这段string用的比较灵活。
code
#define pno cout<<"NO\n"
#define pyes cout<<"YES\n"
string s,t,v;
bool ok;
void check(string cur)
{
if(cur.find(t)!=cur.npos)ok=1;//find substr
}
void solve()
{
cin>>s>>t;ok=0;
for(ll i=1;i<=s.size();i++)
{
v=s.substr(0,i);//v- s[0~i]
reverse(v.begin(),v.end());//v- s[i~0]
check(s.substr(0,i)+v.substr(1,v.size()-1));// s[0~i]+s[i-1~0]
}
if(ok)pyes;
else pno;
}
C. Penalty
题意
点球比赛,最多十回合,交替点球。给出长为10的字符串代表每次点球的情况,1表示必进,0表示必不进,?表示未知。要求最少回合数。
题解
假设两个人为A和B。
考虑到?是可以由自己分配的,那么在每个人胜利为前提的情况结束时可以将其视为1。从头到尾扫过去,当A得分超过一半,或者A的得分-B的得分>B剩下的局数(说明B就算下来每场都得分也赢不了),此时比赛必然结束。
code
int main()
{
ll n;cin>>n;
while(n--){
string s;cin>>s;
int x0=0,x1=0,x=0;
int y0=0,y1=0,y=0;
int ans=0;
bool flag=0;
for(int i=0;i<10;i++){
ans++;
if(i%2){
if(s[i]=='0')x0++;
else if(s[i]=='1')x1++;
else x++;
}
else {
if(s[i]=='0')y0++;
else if(s[i]=='1')y1++;
else y++;
}
if(x1+x>5||y1+y>5||(x1+x)-(y1)>5-(i+2)/2||(y1+y)-(x1)>5-(i+1)/2){
cout<<ans<<'\n';
flag=1;
break;
}
}
if(flag==0)cout<<ans<<'\n';
}
return 0;
}
D. Backspace
题意
两个字符串s和t,对着s进行输入能否得到t。输入指:对于第i次输入可以输入回退键,这会使t最后一个字符删掉(如果存在),或者将s的第i个字符输入到t的末尾。
题解
t倒着扫描,从s末尾一个一个跳,如果s[i]=t[i]说明此时输入了,否者说明此时输了回退键,那么前面的字符也被删掉了,所以这时要跳过s两个字符。(回退键占了一个,删掉了占了一个,所以是两个)
code
#define pno cout<<"NO\n"
#define pyes cout<<"YES\n"
int main()
{
IOS
ll t;
cin>>t;
while(t--){
string s,t;cin>>s>>t;
ll lens=s.size(),lent=t.size();
if(lens<lent)pno;
else{
for (ll i=lens-1;i>=0;i--){
if(s[i]!=t[lent-1]){if(i>0)i--;}
else {lent--;if(lent==0)break;}
}
if(lent==0)pyes;else pno;
}
}
return 0;
}