自学内容网 自学内容网

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


这场比赛里面出到了很多 模拟的题,都是需要很多的时间去写,主要考察到了代码的实现能力,与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; 
}
else
cout<<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';
}

原文地址:https://blog.csdn.net/a13997460860/article/details/140680515

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!