题目链接: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;
}