20190915招商银行信用卡

招商银行信用卡20190915

1.

在一根数轴上,1-n的每个点上都标有'L'或'R',最初每个点上都有一个机器人。现在所有机器人同时一起执行以下操作10^100次:

如果该点上标有'L’,则机器人左移;如果该点上标有'R',则机器人右移。

保证点1上的为'R‘,点n上的为'L'。最后每一个点上有几个机器人?

输入描述:输入包括一个只包含'R'和‘L’字符串s,表示初始化的时候每个点的标记。

2<=|s|<=10的5次方,其中|s|表示字符串的长度。

测试样例:

输入一: RRLRL

输出为:01211

输入二:RRRRRLRLRL

输出:0000331111

分析:

看每个R右边最近L,下标差的奇偶性,奇数就在L左边的R上+1,偶数就在L上+1。L同理。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
queue rque,lque;
string str;
vector count1(100005,0);
int main(){
    cin>>str;
	//scanf("\n",&str);
	int n=str.size();
	for(int i=0;i=0;i--){
        if(str[i]=='L'){
            lque.push(i);
        }
        else{
            while(!lque.empty()){
                int temp=lque.front();
                lque.pop();
                if((temp-i)&1!=0){
                    count1[i+1]++;
                }
                else
                    count1[i]++;
            }
        }
    }
	for(int i=0;i

2.

一串由数字和?组成的字符串,?可以表示0-9,求这个字符串可以表示的数字対13取余后等于5的数字个数。

过40%,先提供个大体的思路吧。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define mod 1000000007
using namespace std;
string str;
vector > dp(100005,vector(13,0));
int main(){
    cin>>str;
	int n=str.size();
    int base=0;
	for(int i=n-1;i>=0;i--){
        if(str[i]=='?'){
            vector tmp(13,0);
            for(int j=0;j<10;j++){
                tmp[((int)pow(10,base)*j)%13]++;
            }
            if(i+1>=n){
                for(int k=0;k<13;k++){
                    dp[i][k]=tmp[k];
                }
                base++;
                continue;
            }
            for(int j=0;j<13;j++){
                for(int k=0;k<13;k++){
                    long long ans=(dp[i+1][j]*tmp[k])%mod;
                    int index=(j+k)%13;
                    dp[i][index]=(dp[i][(j+k)%13]+ans)%mod;
                }
            }
        }
        else{
            int num=str[i]-'0';
            int tmp=((int)pow(10,base)*num)%13;
            //cout<=n){
                dp[i][tmp]++;
                base++;
                continue;
            }
            for(int j=0;j<13;j++){
                //dp[i][(j+tmp)%13]=(dp[i][(j+tmp)%13]+dp[i+1][j]+1)%mod;
                dp[i][(j+tmp)%13]=dp[i+1][j];
            }
        }
        base++;
    }
	printf("%d\n",dp[0][5]);
    /*for(int i=0;i

 

你可能感兴趣的:(笔试)