12.14考试总结

来源:互联网 发布:陈大新 矩阵理论 编辑:程序博客网 时间:2024/05/19 22:57

开篇照样吐槽

(听说要考递归?

(字符串?

(操作?


 就酱,我怀着期(ri)待(gou)的心情打开了题面

第一题:题目描述:

分别用大写英文字母A,B,c,…Z表示这26个路口,并按如下的规则派出这些机器人到交通路口协助指挥交通:u

1、每次派出两名机器人。

2、当两名机器人的名字中存在一个相同的字母时,这两名机器人便到对应的交通路口指挥(ZhiHui)交通;有多个字母相同时,两名机器人需要按字母的字典顺序到这些路口巡逻。(XLuo)

3、当两名机器人的名字中不存在相同的字母时,交警部门的派出指令无效(WuXiao)

1、当不能派出机器人时,在第一行输出“WuXiao”.

2、当两名机器人在路口上指挥交通时,在第一行输出“ZhiHui”,在第二行输出路口编号。

当两名机器人在路口上巡逻时,在第一行输出“XunLuo”,第二行输出巡逻的路口数,

好简单啊!本蒟蒻已经不是当年那个蒟蒻啦!哈哈哈哈太简单了!坐等打脸!

解题思路:暴力二重,开个标记数组,记录是否重复,三种情况按序输出就行啦!

代码:#include<bits/stdc++.h>
using namespace std;
int main()
{
string a,b,t;
char tb;
int k=0,jl=0,pd[26]={0};
cin>>a>>b;
for(int i=0;i<a.length();i++) 
for(int j=0;j<b.length();j++) if(a[i]==b[j]&&pd[a[i]-'A']==0) {k++; pd[a[i]-'A']=1;}
   // for(int i=0;i<=25;i++) if(pd[i]==1) cout<<i<<' ';
if(k==0) {cout<<"WuXiao"<<endl; return 0;}
else if(k==1)
{
cout<<"ZhiHui"<<endl;
for(int i=0;i<a.length();i++) 
    for(int j=0;j<b.length();j++) if(a[i]==b[j]) 
{
cout<<a[i]<<endl;
return 0;
}
    }
else
{
cout<<"XLuo"<<endl;

for(int i=0;i<=25;i++) if(pd[i]==1&&jl+1!=k) {tb='A'+i; cout<<tb<<'-'; jl++;}
                      else if(pd[i]==1) {tb='A'+i; cout<<tb<<endl;}
}
//for(int i=0;i<a.length();i++) 
      // for(int j=0;j<b.length();j++) if(a[i]==b[j]) {cout<<a[i]<<endl; return 0;}
      //if(jl+1!=k) cout<<a[i]<<'-'; 
//else cout<<a[i]<<endl;
//jl++;
return 0;
}

(忽略注释打表打表)

这么腻害的程序肿么可能错

信心满满(蜜汁自信)


什么鬼?

20分。。

一看输出


。。。这是什么东西?

一行80分?80分?

代码:#include<bits/stdc++.h>
using namespace std;
int main()
{
string a,b,t;
char tb;
int k=0,jl=0,pd[26]={0};
cin>>a>>b;
for(int i=0;i<a.length();i++) 
for(int j=0;j<b.length();j++) if(a[i]==b[j]&&pd[a[i]-'A']==0) {k++; pd[a[i]-'A']=1;}
   // for(int i=0;i<=25;i++) if(pd[i]==1) cout<<i<<' ';
if(k==0) {cout<<"WuXiao"<<endl; return 0;}
else if(k==1) 
{
cout<<"ZhiHui"<<endl;
for(int i=0;i<a.length();i++) 
    for(int j=0;j<b.length();j++) if(a[i]==b[j]) 
{
cout<<a[i]<<endl;
return 0;
}
    }
else
{
cout<<"XLuo"<<endl;

        cout<<k<<endl;

for(int i=0;i<=25;i++) if(pd[i]==1&&jl+1!=k) {tb='A'+i; cout<<tb<<'-'; jl++;}
                       else if(pd[i]==1) {tb='A'+i; cout<<tb<<endl;}
}
//for(int i=0;i<a.length();i++) 
       // for(int j=0;j<b.length();j++) if(a[i]==b[j]) {cout<<a[i]<<endl; return 0;}
       //if(jl+1!=k) cout<<a[i]<<'-'; 
//else cout<<a[i]<<endl;
//jl++;
return 0;
}

圣光代码背叛了我!

(浪费1小时凉了凉了)


第二题先不写!

第三题:题目描述:

具体问题是:给定长度为N(1 <= N <=50,000)的只包含左右(小)括号的字符串。能否找出相邻的两个左括号,和两个相邻的右括号,并且左括号的位置比右括号的位置靠左。

是时候展示我666的代码技术了

解题思路:离散化,存2个数组,存双括号下标,暴力二重,如果a在b左边就必然有一对双括号匹配

贴代码:#include<bits/stdc++.h>
using namespace std;
int a[26000]={},b[26000]={},xb=1,xb1=1;
long long s=0;
string c;
int main()
{
cin>>c;
for(int i=0;i<=c.size();i++)
{
if(c[i]=='('&&'('==c[i+1]) {a[xb]=i; xb++;}
if(c[i]==')'&&')'==c[i+1]) {b[xb1]=i; xb1++;}
}
//cout<<a[1]<<' '<<a[2]<<endl<<b[1]<<' '<<b[2]<<endl;
xb--; xb1--;
for(int i=1;i<=xb;i++)
for(int j=1;j<=xb1;j++)
{
if(b[j]>a[i]) {//cout<<b[j]<<" "<<a[i]<<endl;
              s++;
}
cout<<s<<endl;
return 0;
}

第三题:题目描述:

2027年,从清华毕业的久知找了一份为一些文件的某些部分加密的工作,加密的部分是一串小写英文字母,加密的规则是这样的:要是连续出现相同的字母,则把他们替换成这个字母的大写形式,后面紧跟相同字母的个数,并把它之前跟之后的两端字符串调换,例如出现bcmatchingaef,则字符串变成:efA6bc。然后重新扫描字符串,直到没有出现相同小写字母为止。

这题不贴代码辣(我才不会告诉你们我不会写)

老师的思路:

我的思路: