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

题目D: A*BBBB

题目链接

题意描述:

t组输入,每组输入两个整数a,b,其中b的每位数字都相等,a,b非常大,0<=a,b<=10^1000000^ ,并且a,b都不含前导0.

解题思路:

当一个数乘111时我们可以发现这个结果与每一位有关。当a=114514,b=111时:

当前数位小于等于b的数位时,相加即为当前数位的结果,当前数位大于b的数位时,依次去除前一位数字,直到只剩最后以为数字计算后结束。

因此我们在计算时,可以将b拆分为a111...,例如33333可以拆分为x=3与、y=11111
然后将a
x用高精求出结果,再将结果与y进行规律的计算,最终可找出答案

代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int sum[1000010]={0};
signed main()
{
	int t;
	cin>>t;
	while(t--)
	{   
		memset(sum,0,sizeof(sum));
		string s1,s2;
		cin>>s1>>s2;
		reverse(begin(s1),end(s1));
		int a=0,b,c=s2[0]-'0';
		vector<int>res;
		for(int i=0;i<s1.size();i++)
		{
			b=(s1[i]-'0')*c;
			res.push_back((b+a)%10);
			a=(b+a)/10;
		}
		while(a)
		{
			res.push_back(a%10);
			a/=10;
		}
		int n=res.size();
		for(int i=0;i<res.size();i++)
		sum[i+1]=sum[i]+res[i];
		string ans;
		int q=0;
		for(int i=1;i<=n+s2.size();i++)
		{
			int l=max(0,(int)(i-s2.size()));
			int r=min(i,n);
			q+=sum[r]-sum[l];
			ans.push_back(q%10+'0');
			q=q/10;
		}
		while(q)
		{
			ans.push_back(q%10+'0');
			q/=10;
		}
		while(ans.size()>1&&ans.back()=='0')
		ans.pop_back();
		reverse(ans.begin(),ans.end());
		cout<<ans<<endl;
	}
}

H 狼狼的备忘录

题目链接

题意:

输入备忘录的本数,每本包含成员名字,以及信息数,接下来是每条信息,信息是长度不超过10的非空字符串,你需要将同一成员的汇集在一起,如果信息a的后缀与完整信息b相同,则删除信息b,最后把名字按字典序排列,然后输出名字,信息数,信息即可

解题思路:

用容器map<string,set >mp 存储,这样名字就可以自动排序,然后当查找信息后缀是否与别的完整信息重复时,由于信息存在了set中,可以用count是否为真判断,信息后缀的截取可以用substr函数

解题代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
map<string,set<string> >mp;
int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		string s;
		int m;
		cin>>s>>m; 
		for(int i=1;i<=m;i++)
		{
			string p;
			cin>>p;
			mp[s].insert(p);
		}
	}
	for(auto &&[x,y]:mp)
	{
		for(auto &&s:y)
		{
			for(int i=1;i<s.size();i++)
			{
				string str=s.substr(i);
				if(y.count(str))
				y.erase(str);
			}
		}
	}
	cout<<mp.size()<<endl;
	for(auto &&[x,y]:mp)
	{
		cout<<x<<" ";
		cout<<y.size()<<" ";
		for(auto &&s:y)
		cout<<s<<" ";
		cout<<endl; 
	}
	return 0;
}

J 这是签到

题目链接

题意描述

有一个n*m的行列式,如果n!=m,则行列式无法计算,我们补充行或列为0,使其变为可以计算的,然后计算出可计算的行列式的最小值

解题思路:

这道题,我用的暴力,数据范围比较小,就列举出来了。

在最初,我是想先把行列式进行补充,使得m=n,然后进行计算,后来听学长讲后发现,如果m!=n,结果为0,只需要在最后的进行下列操作即可

cpp 复制代码
int k=0;
mi=min(k,min);

在行列中当1,2*2,都比较易于计算,当大于等于3时,将原理啊的行列式在右边再写一遍,当把其遍历1遍就停止。结果即为行列式的结果.

代码:

cpp 复制代码
#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];
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];
	} 
// 	if(m>n)
// 	for(int i=n+1;i<=m;i++)
// 	{
// 		for(int j=1;j<=m;j++)
// 		a[i][j]=0;
// 	}
// 	if(m<n)
// 	for(int i=1;i<=n;i++)
// 	{
// 		for(int j=m+1;j<=n;j++)
// 		a[i][j]=0;
// 	}
	int x=min(n,m);
	int mi=INT_MAX;
	int p=0;
	if(x>=1)
	{
		p=a[1][1];
		mi=min(mi,p);
	}
	if(x>=2)
	{
		p=(a[1][1]*a[2][2]-a[2][1]*a[1][2]);
		mi=min(mi,p);
	}
	if(x>=3)
	{
		p=((a[1][1]*a[2][2]-a[2][1]*a[1][2])*a[3][3])+((a[1][2]*a[2][3]-a[1][3]*a[2][2])*a[3][1])+((a[1][3]*a[2][1]-a[1][1]*a[2][3])*a[3][2]);
		mi=min(mi,p);
	}
	if(x>=4)
	{
		p=(a[1][1]*a[2][2]*a[3][3]-a[1][3]*a[2][2]*a[3][1])*a[4][4]+(a[1][2]*a[2][3]*a[3][4]-a[1][4]*a[2][3]*a[3][2])*a[4][1]+(a[1][3]*a[2][4]*a[3][1]-a[1][1]*a[2][4]*a[3][3])*a[4][2]+(a[1][4]*a[2][1]*a[3][2]-a[1][2]*a[2][1]*a[3][4])*a[4][3];
		mi=min(mi,p);
	}
	if(x>=5)
	{
		p=(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[5][5]+(a[1][2]*a[2][3]*a[3][4]*a[4][5]-a[1][5]*a[2][4]*a[3][3]*a[4][2])*a[5][1]+(a[1][3]*a[2][4]*a[3][5]*a[4][1]-a[1][1]*a[2][5]*a[3][4]*a[4][3])*a[5][2]+(a[1][4]*a[2][5]*a[3][1]*a[4][2]-a[1][2]*a[2][1]*a[3][5]*a[4][4])*a[5][3]+(a[1][5]*a[2][1]*a[3][2]*a[4][3]-a[1][3]*a[2][2]*a[3][1]*a[4][5])*a[5][4];
		mi=min(mi,p);
	}
    int w=0;
    if(m!=n)
    mi=min(mi,w);
	cout<<mi<<endl;
	return 0;
}
相关推荐
.Cnn6 分钟前
用邻接矩阵实现图的深度优先遍历
c语言·数据结构·算法·深度优先·图论
2401_8582861111 分钟前
101.【C语言】数据结构之二叉树的堆实现(顺序结构) 下
c语言·开发语言·数据结构·算法·
Beau_Will17 分钟前
数据结构-树状数组专题(1)
数据结构·c++·算法
迷迭所归处21 分钟前
动态规划 —— 子数组系列-单词拆分
算法·动态规划
爱吃烤鸡翅的酸菜鱼22 分钟前
Java算法OJ(8)随机选择算法
java·数据结构·算法·排序算法
hunandede1 小时前
av_image_get_buffer_size 和 av_image_fill_arrays
c++
寻找码源1 小时前
【头歌实训:利用kmp算法求子串在主串中不重叠出现的次数】
c语言·数据结构·算法·字符串·kmp
Matlab精灵1 小时前
Matlab科研绘图:自定义内置多款配色函数
算法·matlab
诚丞成1 小时前
滑动窗口篇——如行云流水般的高效解法与智能之道(1)
算法
怀澈1222 小时前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++