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

文章目录

链接

链接

A. 国际旅行Ⅰ

题意与思路

这是一个签到题,输入的城市的值排序,然后按他给的顺序输出就行了

代码

cpp 复制代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int a[1010];
signed main()
{
	IOS
	int T=1;
	//cin>>T;
	while(T--)
	{
		int n,m,q,c,b,d;
		cin>>n>>m>>q;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
		}
		sort(a+1,a+1+n);
		for(int i=1;i<=m;i++)
		cin>>c>>d;
		while(q--)
		{
			cin>>b;
			cout<<a[b]<<endl;
		}
	}
	return 0;
}

D.A*BBBB

题意与思路

这个题就是两个大数相乘,我么们可以找一下规律看下图

因为b的每一位都相同上图是第一个样例乘2得到的,可以看出中间的数值是一样的所以,就可以把这看成一种规律来写

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N=2e6+10;

void solve()
{
    string a,b;
    cin>>a;
	cin>>b;
    //cout<<a<<' '<<b<<endl;
    if(a.length()==1&&a[0]-'0'==0)
    {
        cout<<0<<endl;
        return;
    }
    ll c[N],ans[N];
    memset(c,0,sizeof c);
    memset(ans,0,sizeof ans);
    ll lc=0;
    for(ll i=a.length()-1;i>=0;i--)
    {
        c[a.length()-i-1]=a[i]-'0';
        lc++;
		//d[a.length()-i-1]=a[i];
    }
    ll bb=b[0]-'0';
    if(bb==0)
    {
        cout<<0<<endl;
        return;
    }
    ll t=0;
    //c[strlen(c)]='0';
    for(ll i=0;i<lc;i++)
    {
        ll s=c[i]*bb+t;
        c[i]=s%10;
        t=s/10;
    }
    if(t!=0)
    {
        c[lc]=t;
        lc++;
    }
    for(ll i=1;i<lc;i++) c[i]+=c[i-1];
    ll cc=0,tt=0;
	for(ll i=0;i<lc+b.length();i++)
    {
    	if(i<lc) ans[i]=c[i];
    	else ans[i]=c[lc-1];
		if(i>=b.length()) ans[i]-=c[i-b.length()];	
	}
	//for(int i=0;i<lc+b.length();i++) cout<<ans[i]<<' ';
	//cout<<endl;
	//t=0;
    ll lans=0;
    t=0;
	for(ll i=0;i<lc+b.length();i++)
	{
        //if(t==0&&ans[i]==0) break;
		t+=ans[i];
		ans[i]=t%10;
		//ans[i+1]+=t/10;
        t/=10;
        lans++;
	}
    while(t!=0)
    {
        ans[lans++]=t%10;
        t/=10;
    }
	ll f=0;
	for(ll i=lans;i>=0;i--)
	{
		if(f==0&&ans[i]==0) continue;
		else if(f==0&&ans[i]!=0)
		{
			f=1;
		}
		cout<<ans[i];
	 } //cout<<ans[i]<<' ';
	cout<<endl;
}

int main()
{
    int t;
    cin>>t;
    while(t--) solve(); 
}

F.水灵灵的小学弟

题意与思路

这个题目意思是个博弈题,但博弈是一点没考,他说谁赢输出谁的名字首拼大写,但题目上两个名字首拼相同,所以不管输入什么,都输出首拼就行

代码

cpp 复制代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int a[1010];
signed main()
{
	IOS
	int T=1;
	cin>>T;
	while(T--)
	{
		int a,b;
		cin>>a>>b;
		cout<<"DHY"<<endl;
	}
	return 0;
}

H.狼狼的备忘录

题意与思路

这个题就是,给你几行信息每行有名字和信息,让名字相同的合并在一起,但如果一个人有两个信息,一个信息是另一个的后缀就不用保留后缀的那个信息了,如果信息相等就随便舍去一个,我的思路就是把信息都存在一个map嵌套set容器中,然后把相同人的信息存到一个set里面,让后用rfind函数去找是否有后缀,如果有就删除,反之就添加到set里

代码

cpp 复制代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
map<string,set<string>>ma;
signed main()
{
	IOS
	int T=1;
	cin>>T;
	while(T--)
	{
		string s,a;
		int n;
		cin>>s>>n;
		while(n--)
		{
			int f=0;
			cin>>a;
			if(ma[s].size()==0)
		       ma[s].insert(a);
		    else
		    {
		    	vector<string>v;
		    	for(auto i:ma[s])
		    	{
		    		if(i.size()>=a.size())
		    		{
		    			if(i.rfind(a)!=-1&&i.rfind(a)+a.size()==i.size())
						f=1;
					}
					else
					{
						if(a.rfind(i)!=-1&&a.rfind(i)+i.size()==a.size())
                            v.push_back(i);
					}
				}
				if(f==0)
				ma[s].insert(a);
				if(v.size())
				{
                    ma[s].insert(a);
					for(auto x:v)
					{
						ma[s].erase(x);
					}
				}
			}
        }
	}
	cout<<ma.size()<<endl;
	for(auto x:ma)
	{
		cout<<x.first<<" "<<ma[x.first].size()<<" ";
		for(auto y:ma[x.first])
		{
			cout<<y<<" ";
		}
		cout<<endl;
	}
	return 0;
}

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

题意与思路

这个题目就是给你一个字符串让你求他有几个"chuan"字 串,我们可以每次截取5个字符判断是否与"chuan"

代码

cpp 复制代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;

signed main()
{
	IOS
	int T=1;
	//cin>>T;
	while(T--)
	{
		string s,b="chuan";
		int n,sum=0;
		cin>>n>>s;
		for(int i=0;i<s.size();i++)
		{
			string a=s.substr(i,5);
			if(b==a)
			sum++;
		}
		cout<<sum<<endl;
	}
	return 0;
}

J.这是签到

题意与思路

这个题就是给你n行m列的矩形,求(1,1)到(n,n)的行列式,如果给你(3,4)就把第四行全部补0,列不够也是如此

我的思路就是纯暴力,因为范围最大就是5,所以把1到5的行列式全列出来就行了

代码

cpp 复制代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int a[10][10];
signed main()
{
	IOS
	int T=1;
	//cin>>T;
	while(T--)
	{
		int m,n,mi=1e9,t;
		cin>>m>>n;
		int k=max(m,n);
		for(int i=1;i<=m;i++)
		{
			for(int j=1;j<=n;j++)
			{
				cin>>a[i][j];
			}
		}
		mi=min(mi,a[1][1]);
		if(k==1)
		{
			cout<<mi<<endl;
			return 0;
		}
		mi=min(mi,a[1][1]*a[2][2]-a[1][2]*a[2][1]);
		if(k==2)
		{
			cout<<mi<<endl;
			return 0;
		}
		t=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]-
		a[1][3]*a[2][2]*a[3][1]-
		a[2][3]*a[3][2]*a[1][1]-
		a[3][3]*a[1][2]*a[2][1];
		mi=min(mi,t);
		if(k==3)
		{
			cout<<mi<<endl;
			return 0;
		}
		t=a[1][1]*a[2][2]*a[3][3]*a[4][4]+
		a[1][2]*a[2][3]*a[3][4]*a[4][1]+
		a[1][3]*a[2][4]*a[3][1]*a[4][2]+
		a[1][4]*a[2][1]*a[3][2]*a[4][3]-
		a[1][4]*a[2][3]*a[3][2]*a[4][1]-
		a[2][4]*a[3][3]*a[4][2]*a[1][1]-
		a[3][4]*a[4][3]*a[1][2]*a[2][1]-
		a[4][4]*a[1][3]*a[2][2]*a[3][1];
		mi=min(mi,t);
		if(k==4)
		{
			cout<<mi<<endl;
			return 0;
		}
		t=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]-
		a[1][5]*a[2][4]*a[3][3]*a[4][2]*a[5][1]-
		a[2][5]*a[3][4]*a[4][3]*a[5][2]*a[1][1]-
		a[3][5]*a[4][4]*a[5][3]*a[1][2]*a[2][1]-
		a[4][5]*a[5][4]*a[2][2]*a[1][3]*a[3][1]-
		a[1][4]*a[4][1]*a[2][3]*a[3][2]*a[5][5];
		mi=min(mi,t);
		cout<<mi<<endl;
	}
	return 0;
}

总结

这一次比赛中间的题都是大模拟,用stl容器比较多,而我stl用的不好导致模拟题没写出来,当时连两个容器一起怎么遍历都不知道,别说写了,赛后我要好好学一下容器,要不然只用数组对于一些大模拟题太吃亏了

相关推荐
Java小白笔记2 小时前
Mac中安装homebrew
macos
HerayChen5 小时前
HbuildderX运行到手机或模拟器的Android App基座识别不到设备 mac
android·macos·智能手机
hairenjing11235 小时前
在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序
android·人工智能·windows·macos·智能手机
小李飞刀李寻欢7 小时前
Mac电脑如何解压rar压缩包
macos·rar·解压
Java小白笔记7 小时前
Mac中禁用系统更新
macos
AndyFrank7 小时前
mac crontab 不能使用问题简记
linux·运维·macos
Mac新人7 小时前
一招解决Mac没有剪切板历史记录的问题
macos·mac
王拴柱8 小时前
Mac保护电池健康,延长电池使用寿命的好方法
macos·mac
daa208 小时前
macos中安装和设置ninja
macos
Java小白笔记9 小时前
Mac解决 zsh: command not found: ll
macos