600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > ZZNU 压死骆驼的最后一根稻草 规律题

ZZNU 压死骆驼的最后一根稻草 规律题

时间:2022-07-19 01:29:34

相关推荐

ZZNU 压死骆驼的最后一根稻草 规律题

J : 压死骆驼的最后一根稻草

Progress Bar

时间限制:1 Sec 内存限制:128 MiB

提交:179 答案正确:34

题目描述

每个人 都有自己独有的计数方式 比如以下 字符串111123455可以表示为4个1,1个2,1个3,1个4,2个5.为了方便记忆就表示为4--1,1--2,1--3,1--4,2--5当然顺序肯定不能变换 计数方式可以表示为“a--b”的形式 在计数方式中相连的b互不相等且a与b不为0 独有的计数方式 如果转化为字符串 字符串的长度小于10的9次方

给你下面的计数方式 例如5--4也就是字符串44444,10--4也就是字符串4444444444

给你这样的计数方式 判断这个字符串中有多少连续子串所构成的整数是4的倍数

例如5--4可表示为字符串44444里面共有(4,4,4,4,4,44,44,44,44,444,444,444,4444,4444,44444)15个是4的倍数;

输入

第一行是数字T(T<1000)

每一行一个独有的计数方式 长度小于100

输出

输出字符串中有多少个是4的倍数 占一行

样例输入

复制

45--41--1,1--22--4,2--2,2--31--4,1--3,1--2,1--1

样例输出

复制

15133

打表查一下4的倍数的数字会发现规律,对于个位数,只有4/8是4的倍数,对于多位数,如果个位是奇数那他不可能是4的倍数,

如果

个位数是0/4/8,那十位数只有是偶数,这个数才是4的倍数;如果个位数是2/6那么十位数只有是奇数这个数才是4的倍数。

知道规律就简单了,记录下pre表示前面几段有多少个数字,枚举一下当前段的数字,奇数不管,2/6就加上pre,4/8根据前面的

数的奇偶性分情况讨论一下。

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define LL long long #define uint unsigned intLL a[110],b[110];char s[110];int main(){int i,j,k,t;scanf("%d",&t);getchar();while(t--){int tot=0;gets(s);LL ans=0,pre=0;LL n=strlen(s),tmp=0;s[n]=',';for(i=0;i<=n;++i){if(isdigit(s[i])){tmp=tmp*10+(s[i]-'0');}else if(s[i]=='-'){i++;tot++;a[tot]=tmp;tmp=0;}else if(s[i]==','){b[tot]=tmp;tmp=0;}}for(i=1;i<=tot;++i){if(b[i]==2||b[i]==6){if(b[i-1]%2==1){ans+=pre;}}else if(b[i]==4||b[i]==8){if(b[i-1]%2==0){ans+=a[i]*(pre+pre+a[i]+1)/2;}else{ans+=a[i]*(pre+pre+a[i]+1)/2;ans=ans-pre;}}pre+=a[i];}cout<<ans<<endl;}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。