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';
	}
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值