洛谷语言入门月赛(2024 年 01 月)小菜鸡的题解

题目链接:https://www.luogu.com.cn/contest/153584
B 分饼干 I

  • 这题的关键在于理解这句话:老师希望 Z 拿到的饼干块数不少于 yz,但又希望两人拿到的饼干数量差距尽可能小。所以3盒饼干我们求最大的,然后和剩下两个比较小的和,比大小。大的给Z剩下的给yz,上代码
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[3];
	cin>>a[0]>>a[1]>>a[2];
	sort(a,a+3);
	int x,y;
	x=max(a[0]+a[1],a[2]);
	y=min(a[0]+a[1],a[2]);
	cout<<x<<" "<<y<<endl;
	return 0;
}

C 跳房子

  • 这题每个下标对应这一个值,这不是想传统的i++的形式,而是i+a[i],注意n=1的时候要特判。
    按题目给的样例:
    6
    1 1 3 7 8 5
    下标为1,i+1,走到下标2
    下标为2,i+1,走到下标3
    下标为3,i+3,走到下标6
    上个代码
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N];
int main()
{   int n;
    int sum=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
    	cin>>a[i];
	}
	if(n==1)
	{
		cout<<"Yes"<<endl;
		cout<<0<<endl;
		return 0;
	}
	for(int i=1;i<=n;)
	{
		i+=a[i];
		sum++;
		if(i==n)
		{
			cout<<"Yes\n";
			cout<<sum<<endl;
			return 0;
		}
		if(i>n)
		{
			cout<<"No\n";
			cout<<sum<<endl;
			return 0;
		}
	}
	return 0;
}

D 区间函数最小值

  • 这题使用双重循环,将x,y的组合一一遍历,将值和最小值作比较,如果小就代替最小值
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long A,B,C,D,E,F,G,P,X1,X2,Y1,Y2;
	cin>>A>>B>>C>>D>>E>>F>>G>>P>>X1>>X2>>Y1>>Y2;
	long long sum;
	long long max=-1;
	for(int i=X1;i<=X2;i++)
	{
		for(int j=Y1;j<=Y2;j++)
		{
			sum=(A*i*i*i+B*j*j*j+C*i*i*j+D*i*j*j+E*i*j+F*i+G*j)%P;
			if(sum>max)
			{
				max=sum;
			}
		}
	}
	cout<<max<<endl;
	return 0;
}

E 小跳蛙

  • 这题第一眼看,不就是让两个值来回交换不就可以了。但我嫌这个方法不好用。我们不妨想想,这群青蛙是有序的跳,所以1先跳到0,然后1的位置就是0,2要跳0的位置,0原来的位置的值是1,接下来你自己推推。我得到的结论就是这个数组每个值加1,当某个值是n,我们需要特判,这个位置是0.
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,x;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>x;
		x=x+1;
		if(x==n)
		{
			x=0;
		}
		cout<<x<<" ";
	}
	cout<<endl;
	return 0;
}

F 图像变换

  • 思路:由放大的坐标,去映射未放大的图像
    举个简单的例子:a(0.0)
    将这串放大2倍 得到 a(0,0)a(0,1)
    a(1,0)a(1,1)
    0/2=0,1/2=0,所以很明了设放大k倍后的坐标为(x,y)它未放大的对应坐标就为(x/k,y/k)我再上个图就更清楚了
点击查看代码
#include<bits/stdc++.h>
using namespace std;
char a[2000][2000];
int main()
{
	int n,m,k;
	cin>>n>>m>>k;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=0;i<n*k;i++)
	{
		for(int j=0;j<m*k;j++)
		{
			cout<<a[i/k][j/k];
		}
		cout<<endl;
	}
	return 0;
}

H Genshin 玩家

  • 这题的意思就是让我们找Genshin和player的组合,但前提是Genshin必须在player的前面,所以我们直接暴力
点击查看代码
#include<bits/stdc++.h>
using namespace std;
//Genshin
int main()
{
	string s;
	cin>>s;
	int sum=0;
	for(int i=0;i<s.size()-6;i++)
	{
		if(s[i]=='G'&&s[i+1]=='e'&&s[i+2]=='n'&&s[i+3]=='s'&&s[i+4]=='h'&&s[i+5]=='i'&&s[i+6]=='n')
		{
			for(int j=i;j<s.size()-5;j++)
			{
				if(s[j]=='p'&&s[j+1]=='l'&&s[j+2]=='a'&&s[j+3]=='y'&&s[j+4]=='e'&&s[j+5]=='r')
				{
					sum++;
				}
			}
		}
	}
	cout<<sum<<endl;
	return 0;
}
posted on 2024-01-20 15:23  咋瓦鲁多_食我压路机  阅读(147)  评论(0)    收藏  举报