第一题:Frequency
一如既往,第一题都是水题一个
题解:用s数组输入字符串,a数组统计每个单词出现的频率,遍历s数组中的每一个一个单词,出现了就在a数组里+1,后面遍历a数组,用max变量统计出现最多的单词,最后,输出统计最多的单词就可以;
AC代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s[1005];//输入字符串
int a[30]={0};//统计每个单词的频率
scanf("%s",s);
int len=strlen(s);//求出字符串长
for(int i=0;i<len;i++)
{
a[s[i]-'a'+1]++;//统计出现次数
}
int max=0;
for(int i=1;i<=26;i++)
{
if(a[i]>a[max])
{
max=i;
}
}
printf("%c",'a'+max-1);
return 0;
}
第二题:Leftover Recipes
这题我只能说有好方法,我想复杂了,原本打算用动态规划01背包那种思想去写的,想的是取a或者取b,但是后面发现两重循环就秒了,结果还卡了时间,说多了都是泪,呜呜
题解:首先先求出最大能做几份a菜肴,然后循环a菜肴的个数,去求最大的b菜肴,然后求出总和sum,如果比之前出现的最大值max大,就更新max的值
#include <bits/stdc++.h>
using namespace std;
int n;
int p[50];
int a[50];
int b[50];
int s1=0x3f3f3f3f,s2;
int sum=0;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&p[i]);
}
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]!=0&&p[i]/a[i]<s1)
{
s1=p[i]/a[i];//去求出最大的a菜肴个数
}
}
for(int i=0;i<n;i++)
{
scanf("%d",&b[i]);
}
for(int i=0;i<=s1;i++)
{
s2=0x3f3f3f3f;
for(int j=0;j<n;j++)
{
if(b[j]!=0&&(p[j]-a[j]*i)/b[j]<s2&&b[j]!=0)
{
s2=(p[j]-a[j]*i)/b[j];
}
}
sum=max(s2+i,sum);//更新sum的值
}
printf("%d",sum);
return 0;
}
第三题:We Got Everything Covered!
这题也不算很难,用了10分钟就写出来了,主要是去思考 怎样才会有符合的字符串;
题解:不知道该怎么去描述了,就直接说结论吧,前面那个n决定了循环的次数,后面那个k决定了有多少个字母,真的是纯思维题目,没有什么需要多说的,直接看代码好了(如果真的不懂直接私信即可)
AC代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)//循环次数
{
for(int j=0;j<k;j++)//字母个数
{
printf("%c",'a'+j);
}
}
printf("\n");
}
return 0;
}
第四题:A Balanced Problemset?
题解:
AC代码:分享一位天才的代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int x,n;
scanf("%d%d",&x,&n);
while(x%n!=0)
{
n=(x-1)/(x/n)+1;
}
printf("%d\n",x/n);
}
return 0;
}
第五题:Lame King
题解:乍一看像是要用bfs求最短路径,但是后面才发现,用bfs写的话太过于麻烦了,而是要用思维的方式去解决这个问题,就是要横着走一下,竖着走一下,直到和目标点到了,同一行或者列,然后再用移动,跳过的方式一直摸到目标点
AC代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long t,a,b,x,y;
scanf("%lld",&t);
while(t--)
{
int sum=0;
scanf("%lld%lld",&a,&b);
x=abs(a),y=abs(b);
\
if(x==y)
sum=x*2;
else
sum=max(x,y)*2-1;
printf("%lld\n",sum);
}
return 0;
}
总结,这次考试其实还都是思维的题目,但是不如上回发挥的好,主要还是自己想的太复杂了,其实可以思考的简单一点的,下次要注意
寄语:
据说每个人的生命里
都会遇见一束光
在此前天地迷离 长夜永驻
窒息的空气里 没有悲欢的温度
长风不起 黄沙漫天
黯淡的星空里 是重复的余年
有一天有一束光闯了进来
那样迷人 那样刺眼
仅一个照面
脑子就忍不住幻想接下来的故事
一眼万年
此后云海开始翻涌
江潮开始澎湃
昆虫的小须挠着全世界的痒
天地万物 便通通动了起来