欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > 河南萌新联赛2024第(二)场:南阳理工学院

河南萌新联赛2024第(二)场:南阳理工学院

2024/10/25 4:18:32 来源:https://blog.csdn.net/a13997460860/article/details/140680515  浏览:    关键词:河南萌新联赛2024第(二)场:南阳理工学院

文章目录

  • 原题链接
  • A.国际旅行Ⅰ
    • 题意:
    • 思路:
    • 代码:
  • F.水灵灵的学弟
    • 题意:
    • 思路:
    • 代码
  • I.重生之zbk要拿回属于他的一切
    • 题意:
    • 思路:
    • 代码:
  • J.这是签到
    • 题意:
    • 思路:
    • 代码:
  • H.狼狼的备忘录
    • 题意:
    • 思路:
    • 代码
  • D.A*BBBB
    • 题意:
    • 思路:

这场比赛里面出到了很多 模拟的题,都是需要很多的时间去写,主要考察到了代码的实现能力,与codeforces里面的题有些差距。codeforces打多了还是有点不习惯的。题挺好的,尤其是H题感觉很考代码实现能力与STL的使用熟练度。多写写这样的题还是对我们很有好处的。只不过前三题都太水了,没有一点难度

原题链接

点击跳转牛客,进行奇妙冒险🐂

A.国际旅行Ⅰ

题意:

给出一段序列,求里面第k小的数

思路:

直接排序求值(没有一点难度)

代码:

void solve () {int n,m,q;cin>>n>>m>>q;for (int i=1;i<=n;i++) {cin>>a[i];}int x,y;sort(a+1,a+1+n);for (int i=1;i<=m;i++) {cin>>x>>y;}int p;for (int i=1;i<=q;i++) {cin>>p;cout<<a[p]<<'\n';}
}

接下来登场的就更是一道逆天题了

F.水灵灵的学弟

题意:

博弈题,但是两个人名字一样,直接输出他们的名字就行了

思路:

没有思路,直接写

代码

void solve () {
int t;cin>>t;
while (t--) {
int x,y;cin>>x>>y;
cout<<"DHY"<<'\n'
}
}

I.重生之zbk要拿回属于他的一切

题意:

在给出的一串字符串里面找有几个“chuan”

思路:

用find函数直接找,找到了之后再往后找,直到find为-1的时候停止

代码:

void solve () {int n;cin>>n;string s;cin>>s;int x=0,cnt=0;while (1) {x=s.find("chuan");if (x==-1) {break;}cnt++;s.erase(x,5);}cout<<cnt;
}

J.这是签到

题意:

给出n×m的序列,按照题意求出最小的行列式的大小

思路:

此题无方思路茫,暴力求解泪两行。

代码:

void solve () {int n,m;cin>>n>>m;for (int i=1;i<=n;i++) {for (int j=1;j<=m;j++) {cin>>a[i][j];}}int ma=min(n,m);int ans=INT_MAX;for (int i=1;i<=ma;i++) {if (i==1) {ans=min(a[1][1],ans);}if (i==2) {int t=a[1][1]*a[2][2]-a[1][2]*a[2][1];ans=min(ans,t);}if (i==3) {int t1=a[1][1]*a[2][2]*a[3][3]+a[1][2]*a[2][3]*a[3][1]+a[1][3]*a[2][1]*a[3][2];int t2=a[1][3]*a[2][2]*a[3][1]+a[1][1]*a[2][3]*a[3][2]+a[1][2]*a[2][1]*a[3][3];ans=min(ans,t1-t2);
//			cout<<t1<<' '<<t2<<' ';}if (i==4) {int t1=a[1][1]*a[2][2]*a[3][3]*a[4][4]+a[1][2]*a[2][3]*a[4][1]*a[3][4]+a[1][4]*a[2][1]*a[3][2]*a[4][3]+a[1][3]*a[2][4]*a[3][1]*a[4][2];int t2=a[1][4]*a[2][3]*a[3][2]*a[4][1]+a[1][3]*a[2][2]*a[3][1]*a[4][4]+a[2][4]*a[3][3]*a[4][2]*a[1][1]+a[1][2]*a[2][1]*a[3][4]*a[4][3];int ans=t1-t2;ans=min(ans,t1-t2);}if (i==5) {int t1=a[1][1]*a[2][2]*a[3][3]*a[4][4]*a[5][5]+a[1][2]*a[2][3]*a[3][4]*a[4][5]*a[5][1]+a[1][3]*a[2][4]*a[3][5]*a[4][1]*a[5][2]+a[1][4]*a[2][5]*a[3][1]*a[4][2]*a[5][3]+a[1][5]*a[2][1]*a[3][2]*a[4][3]*a[5][4];int t2=a[1][5]*a[2][4]*a[3][3]*a[4][2]*a[5][1]+a[1][4]*a[2][3]*a[3][2]*a[4][1]*a[5][5]+a[1][3]*a[2][2]*a[3][1]*a[4][5]*a[5][4]+a[1][2]*a[2][1]*a[3][5]*a[4][4]*a[5][3]+a[1][1]*a[2][5]*a[3][4]*a[4][3]*a[5][2];int ans=t1-t2;ans=min(ans,t1-t2);}}if (m!=n) {if (ans>0) cout<<"0";else cout<<ans; }elsecout<<ans;
}

范围那么小,不就是留着给我暴力打表的吗

H.狼狼的备忘录

题意:

给出很多信息,给它们整理起来,最后按要求输出

思路:

用map<string,set< string > > ;将每个人的信息存入相应的数组set里面,再在set里面对不符合要求的给删掉。每个人的名字是字符串s,每个人的信息是str刚开始mp[s].size()的大小如果是零的话,一定往里面存入东西,然后里面如果不为0,就要遍历这个set,用for (auto t : mp[s]),如果t长的话,就判断str是不是为t的后缀,如果遍历完了都没有找到后缀的话,就把str存入里面,就执行mp[s].insert(str)。如果str长的话,就要把原set里面的东西选择性的删掉,那么删谁呢?就要遍历这个set找到谁是str的后缀,然后给它删掉,用erase函数是实现,最后再按要求输出map里面的东西就可以了。

代码

void solve () {map<string,set<string> >mp;int n;cin>>n;for (int i=1;i<=n;i++) {string s;cin>>s;int q;cin>>q;for (int j=1;j<=q;j++) {string str;cin>>str;int flag=1;if (mp[s].size()==0) mp[s].insert(str);else {vector<string> v;for (auto t:mp[s]) {if (t.size()>=str.size()) {int k=t.rfind(str);if (k!=-1&&k+str.size()==t.size()) flag=0; }else {int k=str.rfind(t);if (k!=-1&&k+t.size()==str.size()) v.push_back(t);}}if (flag) mp[s].insert(str);if (v.size())for (auto t : v) {mp[s].erase(t);}} }}int ans1=mp.size();cout<<ans1<<'\n';for (auto t1 : mp) {cout<<t1.fi<<' '<<mp[t1.fi].size()<<' ';for (auto t2 : mp[t1.fi]) {cout<<t2<<' ';}cout<<'\n';}}

D.A*BBBB

题意:

两个非常大的数字相乘求结果python过不了

思路:

将两个数字用字符串输入,因为b它字符都一样,所以我们可以根据乘法的性质
在这里插入图片描述
例如这样,模拟几下,利用乘法的性质,将代码模拟出来即可,有些难度,比较难代码实现

void solve () {string x,y;cin>>x>>y;reverse(ALL(x));string ans;int t=0,t1=0;for (int i=0;i<x.size()+y.size();i++) {if (i<x.size())t+=(x[i]-'0');if(i-y.size()>=0&&i-y.size()<x.size()) t-=(x[i-y.size()]-'0');t1+=t*(y[0]-'0');ans.push_back(t1%10+'0');t1/=10;} while (ans.size()>1&&ans.back()=='0') ans.pop_back();reverse(ALL(ans));cout<<ans<<'\n';
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com