CSDN竞赛第40期题解

Posted 酷酷的Herio

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSDN竞赛第40期题解相关的知识,希望对你有一定的参考价值。

CSDN竞赛第40期题解

1、题目名称:小鱼的航程(改进版)

有一只小鱼,它上午游泳150公里,下午游泳100公里,晚上和周末都休息(实行双休日),假设从周x(1<=x<=7)开始
算起,请问这样过了n天以后,小鱼一共累计游泳了多少公里呢?

ll x,n;cin>>x>>n;
ll t = n/7;
ll y = t*5*(100+150);
n%=7;
for(int i=0,j=x;i<n;i++,j=j%7+1)
if(j<6) y+=250;

cout<<y;

2、题目名称:编码

编码工作常被运用于密文或压缩传输。这里我们用一种最简单的编码方式进行编码:把一些有规律的单词编成数字。 字母
表中共有26个字母a,b,…,z,这些特殊的单词长度不超过6且字母按升序排列。把所有这样的长度相同的单词放在
一起,按字典顺序排列,一个单词的编码就对应着它在整个序列中的位置。 你的任务就是对于所给的单词,求出它的编

string s;cin>>s;
int n=s.size();
for(int i=1;i<n;i++)
if(s[i]<=s[i-1])
return puts("0"),0;

ll res = 0;
for(int i=1;i<n;i++) res+=f(26,i);
for(int x=0;x<n;++x)
for(char ch=(x==0?'a':s[x-1]+1);ch<s[x];ch++)
res+=f('z'-ch,n-x-1);


res++;
cout<<res;

3、题目名称:一维数组的最大子数组和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组,输出该子数组在原数组中的开始下标和结束下标。原数组
下标从0开始

ll s= 0;
int n;cin>>n;
rep(i,0,n-1)
cin>>a[i];

ll ans = -1e15;
ll st=0,cur=0,ed=0;
for(int i=0;i<n;i++)
if(s<0)
s=a[i];
cur=i;

else
s+=a[i];

if(s>ans)
ans=s;
st=cur;
ed=i;


printf("%lld %lld\\n",st,ed);

4、题目名称:喜水青蛙

总是喜欢在水里嬉戏的青蛙,某天要过河拜访一位朋友。
已知河道中长满了带刺的不知名生物,能通过的路只有一条直线,长度为L。
直线上随机分布着m块石头。青蛙的最小跳跃距离是s,最大跳跃距离是t。
青蛙想要尽可能的少踩石头,那么它通过河道最少会踩到多少石头?

int l;
int n,s,t;
scanf("%d%d%d%d",&l,&s,&t,&n);
rep(i,1,n) scanf("%d",&a[i]);
if(s==t)
int cnt = 0;
rep(i,1,n) if(a[i]%s==0) cnt++;
printf("%d\\n",cnt);return 0;

int dis = s*t;
sort(a+1,a+n+1);
int x = 0;
rep(i,1,n)
if(a[i]-a[i-1]>dis) x+=dis;
else x+=a[i]-a[i-1];
vis[x] = 1;

mst(f,0x3f);
f[0] = 0;
for(int i=1;i<=x+t;i++)
for(int j=s;j<=t;j++)
if(i>=j) f[i] = min(f[i],f[i-j]+vis[i]);


int ans = 1e9;
for(int i=x;i<=x+t;i++)
cmn(ans,f[i]);
printf("%d\\n",ans);
return 0;

以上是关于CSDN竞赛第40期题解的主要内容,如果未能解决你的问题,请参考以下文章

CSDN竞赛第27期题解

CSDN竞赛第33期题解

CSDN竞赛第33期题解

CSDN 编程竞赛第15期题解

CSDN 编程竞赛第15期题解

CSDN 编程竞赛第15期题解