总结:4.22晚比赛,只AC了一题。。啊啊啊啊~B题总是有5个测试点不过。。。不知道没有注意到哪些细节。。。C题心态没了,懒得做了,大概读了一下题意,可以过几个测试点。。总之,太失败了啊啊啊!!!
A - Treasure Chest
思路:遍历字符串s,同时记录“|”的数量,若出现“*”则看出现几个“|”,若出现1个则“*”在里面,否则在外面
#include<iostream>
using namespace std;
int main(){
int a=0,n;
cin>>n;
bool f=0;
string s;
cin>>s;
for(int i=0;i<n;i++){
if(s[i]=='|'){
a++;
}
if(s[i]=='*'){
if(a!=1){
f=1;
}else{
f=0;
}
break;
}
}
if(!f){
cout<<"in"<<'\n';
}else{
cout<<"out"<<'\n';
}
return 0;
}
B - Trick Taking
思路:啊啊啊啊~做题的时候脑子短路了!这么低级的错误也发现不了!简单说一下思路:在输入等级也就是r的时候,同时判断c是否等于t,如果等于t则记录r的最大值,同时记录一个c等于c[1]的最大值,最后看是否有c等于t进行输出即可
#include<iostream>
using namespace std;
const int N=200005;
int c[N],r[N];
int main(){
bool f=0;
int n,t,nmax=0,nnmax=0,ans,aans;
cin>>n>>t;
for(int i=1;i<=n;i++){
cin>>c[i];
}
for(int i=1;i<=n;i++){
cin>>r[i];
if((c[i]==t)&&(r[i]>nmax)){
f=1;
nmax=r[i];
ans=i;
}
if((c[i]==c[1])&&(r[i]>nnmax)){
nnmax=r[i];
aans=i;
}
}
if(f){
cout<<ans<<'\n';
}else{
cout<<aans<<'\n';
}
return 0;
}
C - Dango
玛德!我是撒比!!!
思路:什么双指针,低级模拟就够了。。。-ooooo型的团子只能出现在最后一个,其他都能化为ooooo-形式的,因为只要不是最后一个团子,后面都会有-
#include<iostream>
using namespace std;
int main(){
bool f=0;
int n,nmax=0,ans=0;
cin>>n;
string s;
cin>>s;
for(int i=0;i<n;i++){
if(s[i]=='o'){
ans++;
if(f&&i==n-1){
nmax=max(nmax,ans);
}
}else{
f=1;
nmax=max(nmax,ans);
ans=0;
}
}
if(nmax==0){
cout<<-1;
}else{
cout<<nmax;
}
return 0;
}
D - Find by Query(交互题)
交互题注意题目意思!!!理解交互题!!!
思路:一个由0、1组成的字符串,第一个为0,最后一个为1,输出SpSp+1的下标p,二分,第一个为0,最后一个为1很重要!!!如果mid为0则往右寻找,否则往左寻找
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int l=1,r=n,mid,s;
while(l<=r){
mid=l+r>>1;
cout<<"?"<<mid<<'\n';
cin>>s;
if(!s){
l=mid+1;
}else{
r=mid-1;
}
}
cout<<"!"<<l-1<<'\n';
return 0;
}