20集训——day5

时间不知不觉中走过了5天,今天是考试。我觉得我这次考得比之前有进步,虽然老师说是题太水了。这次我考了310分是第十九名。第一题是80,第二题是100,第三题是30,第四题是100。

#include<bits/stdc++.h>
using namespace std;
int a[50][51000]={};
int b[50];
int main()
{
 freopen("index.in","r",stdin);
 freopen("index.out","w",stdout);
 int n,m,k,s,l=0,w,p=1;
 char c,f;
 scanf("%d%d",&n,&m);
 for(int i=1;i<=50;i++)
  b[i]=1;
 for(int i=1;i<=n;i++)
 {
   scanf(" %c",&f);
   w=int(f-'a'+1);
   a[w][b[w]]=i;//横坐标为字母的ASCLL码值,纵坐标为该字母的出现次数,该数字为字母在序列中的位置。
   b[w]++;
 }
 for(int i=1;i<=m;i++)
 {
  scanf(" %c%d%d",&c,&k,&s);
  w=int(c-'a'+1);
  if(a[w][k]!=s)
   l++;
 }
 if(l==0) printf("AK");
 else printf("%d",l);
}

这题输入输出要用scanf和printf用惯了cin,cout都不想用这俩东西。但我20分就丢在了这儿。哭

第二题:一个人出题要n分钟,一共有x道题可以出,每道题要花a[i]分钟。问最多能出几道题。 这道题的数据只允许一从循环,要用贪心的算法。

#include<bits/stdc++.h>
using namespace std;
long long a[110000];
int main()
{
 freopen("zzx.in","r",stdin);
 freopen("zzx.out","w",stdout);
 int n,m;
 long long x=1;
 cin>>n>>m;
 for(int i=1;i<=n;i++)
  cin>>a[i];
 sort(a+1,a+1+n);
 while(m-a[x]>=0)//用贪心思想,尽量出时间少的题,可以节省时间
 {
  m-=a[x]; x++;
 }
 cout<<x-1;
}

第三题:求三个数的最小公倍数。(一大串的题目就这几个字的意思)

#include<bits/stdc++.h>
using namespace std;
int gcd(long long x,long long y)
{
 if(y==0)
  return x;
 return gcd(y,x%y);
}
int main()
{
 freopen("running.in","r",stdin);
 freopen("running.out","w",stdout);
 long long a,b,c,k,l,k1;
 cin>>a>>b>>c;
 k=gcd(a,b);//求a b的最大公约数
 l=(a/k)*b;//a b的最大公倍数
 k1=gcd(l,c);//求a,b的最大公倍数和c的最大公约数可求出a,b,c的共同的最小公因数。
 l=(l/k1)*c;//a,b,c的最小公倍数
 cout<<l;
}

我考三十分的是因为k1=gcd(l,c)这句中a b的最大公倍数改成了求a b的最大公约数。我本来了想法是a b的最大公倍数但一时脑抽变成了a b的最大公约数,而且样例也没查出来。

第四题:1~n!的结果结尾有几个零。这题上课时讲过,因为2一定比5多所以记录一共有多少个5即可

#include<bits/stdc++.h>
using namespace std;
int main()
{
 freopen("zero.in","r",stdin);
 freopen("zero.out","w",stdout);
 int n,s=0;
 cin>>n;
 while(n>0)
  s+=n/=5;
 cout<<s;
}

这程序短到吓人,大概就和刚写程序时的长度差不多。



猜你喜欢

转载自blog.csdn.net/wangzhuojia/article/details/80961704