自学内容网 自学内容网

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

A. 国际旅行Ⅰ

题目:

在这里插入图片描述

思路:

因为题意上每个国家可以相互到达,所以只需要排序,输出第k小的值就可以了。

AC代码:

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
int a[1010];
signed main()
{
IOS
int n,m,q,u,v,k;
cin>>n>>m>>q;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=1;i<=m;i++)
{
cin>>u>>v;
}
sort(a,a+n);
for(int i=1;i<=q;i++)
{
cin>>k;
cout<<a[k-1]<<'\n';
}
}

D.A*BBBB

题目:

在这里插入图片描述

思路:

因为数据范围特别大,如果用高精乘的话会时间超限,但是题目里面说b的每一位数字都是一样的,所以就把该数字题出来,后面都是1*1,只需要用a乘一个个位数,然后再错位相加。

AC代码:

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
typedef pair<int,int> PII;
const int N=2e6+20;
int a[N],ans[N],num[N],b[N];
signed main()
{
IOS
int t;
cin>>t;
while(t--)
{
memset(a,0,sizeof(a));
string s1,s2;
cin>>s1>>s2;
reverse(s1.begin(),s1.end());
int n=s1.size();
for(int i=0;i<n;i++)
{
b[i]=s1[i]-'0';
a[i]+=b[i]*(s2[0]-'0');
a[i+1]+=a[i]/10;
a[i]%=10;
//a[i]*=(s2[0]-'0');
//if(a[i]>=10)
//{
//a[i+1]+=a[i]/10;
//a[i]%=10;
//}
}
//for(int i=0;i<n;i++)
//{
//if(a[i]>=10)
//{
//a[i+1]+=a[i]/10;
//a[i]%=10;
//}
//}
if(a[n]==0) n--;
reverse(a,a+n+1);
int m=s2.size();
ans[0]=a[0];
for(int i=1;i<=n;i++)
{
ans[i]=ans[i-1]+a[i];
}
int r=-1,l=-m-1;
int ss=n+m-1;
for(int i=0;i<=ss;i++)
{
r++;
l++;
int rr,ll;
if(r>n) rr=ans[n];
else rr=ans[r];
if(l<0) ll=0;
else ll=ans[l];
num[i]=rr-ll;
}
for(int i=ss;i>=1;i--)
{
if(num[i]>=10)
{
num[i-1]+=num[i]/10;
num[i]%=10;
}
}
int dd=0;
for(int i=0;i<=ss;i++)
{
if(num[i]==0&&dd==0&&i!=ss) continue;
dd=1;
cout<<num[i];
}
cout<<'\n';
}
}

F. 水灵灵的小学弟

题目:

在这里插入图片描述

思路:

一开始一位是个博弈题,刚想开写,发现两个人的字母缩写相同直接输出就可以了。

AC代码:

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
signed main()
{
IOS
int t;
cin>>t;
while(t--)
{
int a,b;
cin>>a>>b;
cout<<"DHY"<<'\n';
}
}

H.狼狼的备忘录

题目:

在这里插入图片描述

思路:

一道模拟题,用了一个map里面套set,如果mp[id]的大小为空的话,就往里面存,否则,遍历这个set,如果mp[id]中有比该字符串长的字符串,就需要判断该字符串是否为其后缀,遍历完后如果不是mp[id]任何一个的字符串,就存入里面;如果该字符比前面已存入的长,就要遍历这个set,看谁是该字符串的后缀,删掉。最后从头输出map。

AC代码:

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
signed main()
{
IOS

int n;
cin>>n;
map<string,set<string> > mp;
for(int i=0;i<n;i++)
{
string id;int op;
cin>>id>>op;
while(op--)
{
string x;
cin>>x;
if(mp[id].empty())
mp[id].insert(x);
else
{
int flag=1;
vector<string> q;
for(auto tt:mp[id])
{
if(tt.size()>=x.size())
{
int k=tt.rfind(x);
if(k!=-1)
{
if(k+x.size()==tt.size())
flag=0;
}

}
else
{
int k=x.rfind(tt);
if(k!=-1)
{
if(k+tt.size()==x.size())
q.push_back(tt);
}
}
}
if(flag) mp[id].insert(x);
if(!q.empty())
{
for(auto ss:q) mp[id].erase(ss);
}
}
}
}
cout<<mp.size()<<'\n';
for(auto i:mp)
{
cout<<i.first<<" "<<i.second.size()<<" ";
for(auto j:i.second)
cout<<j<<" ";
cout<<'\n';
}

}

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

题目:

在这里插入图片描述

思路:

暴力遍历一遍就可以了。

AC代码:

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
signed main()
{
IOS
int n,t=0;
cin>>n;
string s;
cin>>s;
for(int i=0;i<n;i++)
{
//cout<<s[i]<<" ";
if(s[i]=='c')
{
if(s[i+1]=='h'&&s[i+2]=='u'&&s[i+3]=='a'&&s[i+4]=='n')
{
t++;
s[i]='s';
s[i+1]='s';
s[i+2]='s';
s[i+3]='s';
s[i+4]='s';
}
}
}
cout<<t<<'\n';
}

J. 这是签到

题目:

在这里插入图片描述

思路:

数据范围特别小,我直接纯暴力写的,根据下面给的33的公式,推出来4,5的,直接暴力给a了。在这里插入图片描述
根据3
3的行列式可以得出,最终结果是主对角线对应的乘积减去副对角线对应的乘积的和。比如从左上出发最长的正对角线对应的是从右上出发最长的正对角线相减;左上的正对角线右边的一个对角线加上左下对应右上的正对角线右边的一个对角线加上左上,依次类推,可以得出4,5的公式。

AC代码:

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
int a[10][10],s[10];
int ss=INT_MAX;
signed main()
{
IOS
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 t=min(n,m);
s[1]=a[1][1];
s[2]=a[1][1]*a[2][2]-a[1][2]*a[2][1];
s[3]=((a[1][1]*a[2][2]*a[3][3]-a[1][3]*a[2][2]*a[3][1])+(a[1][2]*a[2][3]*a[3][1]-a[1][1]*a[2][3]*a[3][2])+(a[1][3]*a[2][1]*a[3][2]-a[1][2]*a[2][1]*a[3][3]));
//cout<<s[3]<<'\n';
s[4]=((a[1][1]*a[2][2]*a[3][3]*a[4][4]-a[1][4]*a[2][3]*a[3][2]*a[4][1])+(a[1][2]*a[2][3]*a[3][4]*a[4][1]-a[2][4]*a[3][3]*a[4][2]*a[1][1])+(a[1][3]*a[2][4]*a[3][1]*a[4][2]-a[3][4]*a[4][3]*a[1][2]*a[2][1])+(a[2][1]*a[3][2]*a[4][3]*a[1][4]-a[1][3]*a[2][2]*a[3][1]*a[4][4]));
s[5]=((a[1][1]*a[2][2]*a[3][3]*a[4][4]*a[5][5]-a[1][5]*a[2][4]*a[3][3]*a[4][2]*a[5][1])+(a[1][2]*a[2][3]*a[3][4]*a[4][5]*a[5][1]-a[2][5]*a[3][4]*a[4][3]*a[5][2]*a[1][1])+(a[1][3]*a[2][4]*a[3][5]*a[4][1]*a[5][2]-a[3][5]*a[4][4]*a[5][3]*a[1][2]*a[2][1])+(a[1][4]*a[2][5]*a[3][1]*a[4][2]*a[5][3]-a[4][5]*a[5][4]*a[1][3]*a[2][2]*a[3][1])+(a[1][5]*a[2][1]*a[3][2]*a[4][3]*a[5][4]-a[5][5]*a[1][4]*a[2][3]*a[3][2]*a[4][1]));
//int ss=INT_MAX;
for(int i=1;i<=t;i++)
{
//cout<<s[i]<<" ";
ss=min(s[i],ss);
}
if(n==m)
cout<<ss<<'\n';
else
{
if(ss<=0)
cout<<ss<<'\n';
else
cout<<"0"<<'\n';
}
}

原文地址:https://blog.csdn.net/2401_84027054/article/details/140683527

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