牛客小白月赛105 补题
B lz的数字问题
思路:多列举测试用例,考虑完整。首先判断是整数还是小数,小数分整数和小数两部分判断(函数调用最方便!)。注意有<小数的小数部分不够六位>的情况
看个错误代码:
tip(注释里):1.判断整数和小数应遍历整个数组,若出现".",则为小数,否则相反。
2.数组 string ar,aa;
后添加新元素ar.push_back(
'0'
);
或ar += aa[j];
3.ar = ar.substr(0,6);
剪切长度为六的数组再比较很简单,这样就不用逐个判断了
substr()是用于字符串处理的预定义函数。此函数将两个值pos和len作为参数,并返回一个新构造的字符串对象,其值初始化为该对象的子字符串的副本。从pos开始复制字符串,直到pos + len表示[pos,pos + len)为止。
B wa
#include<bits/stdc++.h>
using namespace std;
int main()
{
string aa,bb;
string al,ar;
string bl,br;
cin>>aa>>bb;
int h=0,t=0;
for(int i=0;i<aa.size();i++){
if(aa[i]=='.'){
for(int j=0;j<i;j++){
al[j]=aa[h]; //2
h++;
}
t=i+1;
for(int j=0;j<aa.size()-i;j++){
ar[j]=aa[t]; //2
t++;
}
break;
}
else { //1
for(int i=0;i<aa.size();i++){
al[i]=aa[i];
}
ar={"000000"};
}
}
for(int i=0;i<bb.size();i++){
if(bb[i]=='.'){
for(int j=0;j<i;j++){
bl[j]=bb[h];
h++;
}
t=i+1;
for(int j=0;j<bb.size()-i;j++){
br[j]=bb[t];
t++;
}
break;
}
else {
for(int i=0;i<bb.size();i++){
bl[i]=bb[i];
}
br={"000000"};
}
}
if(al==bl&&ar[0]==br[0]&&ar[1]==br[1]&&ar[2]==br[2]&&ar[3]==br[3]&&ar[4]==br[4]&&ar[5]==br[5]) //3
cout<<"YES";
else cout<<"NO";
return 0;
}
下面是对的qwq,把所有要比较的数都存到ans数组里好简单
B ac
#include<bits/stdc++.h>
using namespace std;
string f(string aa){
string ans= "";//注意先定义个空字符串
int ok=0;//遇到了小数点
int cnt=0;//小数点后有几位
for(int i=0;i<aa.size();i++){
if(ok) cnt++;
if(aa[i]!='.') ans+=aa[i];//整数部分
else ok=1;
if(cnt==6) break;
}
for(int i=cnt;i<6;i++){
ans+='0';//不足补0
}
return ans;
}
int main(){
string aa,bb;
cin>>aa>>bb;
if(f(aa)==f(bb)) cout<<"YES";
else cout<<"NO";
return 0;
}
E lz的括号问题
思路:反方向思考,这道题已知的()始终是成对出现,即可以只考虑一方面“(”。
总数n减去<已找到的“(”>即<已匹配的>等于<未匹配的>.
记“(”数量为cnt,当编号为 i 每出现一个"(", cnt++;
用n-cnt
表示答案,若出现")",则 cnt--;
注意考虑"-1"的两种情况!
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
string s;
cin>>n>>s;
vector<int>ans;//定义整数动态数组
int cnt=0;//未匹配的"("的数量
for(int i=0;i<s.size();i++){
if(s[i]=='(') {
cnt++;
ans.push_back(n-cnt);//给的是()成对出现
}
else cnt--;//匹配一个减一个
if(cnt<0){//"("数量少
cout<<"-1";
return 0;
}
}
if(cnt) {//遍历结束后还有未匹配的"("
cout<<"-1";
return 0;
}
for(int i=0;i<ans.size();i++){
cout<<ans[i]<<" ";
}
return 0;
}