算法题(320-快手模拟)

前几个月放映的头号玩家简直火得不能再火了,作为一个探索终极AI的研究人员,月神自然去看了此神剧。
由于太过兴奋,晚上月神做了一个奇怪的梦,月神梦见自己掉入了一个被施放了魔法的深渊,月神想要爬上此深渊。

已知深渊有N层台阶构成(1 <= N <= 1000),并且每次月神仅可往上爬2的整数次幂个台阶(1、2、4、…),请你编程告诉月神,月神有多少种方法爬出深渊

要点:动态规划,类似于爬楼梯,只不过累计求和的不是往前数的两阶,而是2的所有幂阶。根据 https://blog.csdn.net/FlushHip/article/details/83822873 ,输出数据还是要mod 1000000003。

#include<iostream>
#include<vector>
using namespace std;

int main(){
    long long n,k;
    cin>>n;
    for(long long i=0;i<n;i++)
    {
        cin>>k;
        vector<long long> v;
        v.push_back(1);
        // fill out the table
        for(long long j=1;j<=k;j++){
            long long num=0;
            long long last=1;
            while(j>=last){
                num+=v[j-last];
                last=last<<1;
            }
            v.push_back(num);
        }
        cout<<v[k];
        if(i<n-1)cout<<endl;
    }
    return 0;
}

通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串归一化程序,统计字符串中相同字符出现的次数,并按字典序输出字符及其出现次数。
例如字符串"babcc"归一化后为"a1b2c2"

之前做过一道类似的题,于是无脑上了python

x=input()
d=dict()
r=''
for i in range(len(x)):
    if x[i] in d:
        d[x[i]]+=1
    else:
        d[x[i]]=1

for i in ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','p','q','r','s','t','u','v','w','x','y','z']:
    if i in d:
        r=r+i+str(d[i])
print(r)

只通过了50%,卡在了长到令人发指的一个case上,借用以下大佬的代码

#include <stdio.h>
#define SIZE 128
 
int main(void){
    int count[26] = {0};
    char buf[SIZE];
//    char c;
//    while( ( c = getchar() ) != '\n' )
//        count[c-'a'] ++;
    fgets(buf, SIZE, stdin);
    int i = 0;
    while( buf[i] != '\n' ){
        count[buf[i++] - 'a'] ++;
        if( i == SIZE ){
            i = 0;
            fgets(buf, SIZE, stdin);
        }
    }
    i = 0;
    while( i < 26 ){
        if( count[i] != 0 )
            printf("%c%d",i+'a',count[i]);
        i ++;
    }
    return 0;
}

快手的题还是很灵活的
ref:
https://blog.csdn.net/FlushHip/article/details/83822873

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值