<span style="font-size:14px;">#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define LL __int64
int main()
{
LL n,b,p;
while(scanf("%I64d%I64d%I64d",&n,&b,&p)!=EOF)
{
LL x=0,y=0;
y=n*p;
while(n>0)
{
x+=((n/2)*(2*b+1));
n=n-n/2;
if(n==1)
break;
}
printf("%I64d %I64d\n",x,y);
}
return 0;
}</span>
大致题意:
给出一串数,从中找出连续的字串,求能够整除4的字串的个数
方法:
从后往前遍历
如果一个数的后两位能被4整除,则这个数就是4的倍数
#include<stdio.h>
#include<string.h>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL __int64
const LL maxm=1e6+10;
char s[maxm];
int main()
{
while(scanf("%s",s)!=EOF)
{
LL sum=0;
if((s[0]-'0')%4==0)
{
sum++;
}
for(LL i=1; i<strlen(s); i++)
{
if((s[i]-'0')%4==0)
sum++;
if(((s[i-1]-'0')*10+(s[i]-'0'))%4==0)
sum+=i;
}
printf("%I64d\n",sum);
}
return 0;
}
<span style="font-size:14px;">#include<stdio.h>
#include<string.h>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL __int64
const LL maxm=1e6+10;
char s[maxm];
int main()
{
LL n,k;
while(scanf("%I64d%I64d",&n,&k)!=EOF)
{
scanf("%s",s);
LL sum=0;
for(int i=0; i<strlen(s); i++)
{
if((s[i]-'a')<=12)
sum+=(26-((s[i]-'a')+1));
else
sum+=(s[i]-'a');
}
if(sum<k)
{
printf("-1\n");
}
else
{
for(LL i=0; i<strlen(s)&&k!=0; i++)
{
if((s[i]-'a')>=(LL)12)
{
if((s[i]-'a')<=k)
{
k=k-(s[i]-'a');
s[i]='a';
}
else
{
s[i]=(s[i]-k);
k=0;
}
}
else
{
if(('z'-s[i])<=k)
{
k-=('z'-s[i]);
s[i]='z';
}
else
{
s[i]=(s[i]+k);
k=(LL)0;
}
}
}
printf("%s\n",s);
}
}
return 0;
}</span>