zoukankan      html  css  js  c++  java
  • codevs4343 找回密码

    题目描述 Description

    jrMz 很喜欢动漫《叛逆的鲁鲁修》(额= =不知道是不是因为他盯上了动画片里的 MM),他
    准备以一种神奇的方式降临《叛逆的鲁鲁修》世界,所以他先从《变形金刚》里把大黄蜂拐
    了出来,然后成功加入了黑色骑士团。不过比较坑的事情出现了,正在与机甲激烈战斗中的
    大黄蜂突然 WA 了,只有输入密码才能使它 AC,不幸的是 jrMz 已经忘记了密码。大黄蜂
    的密码是一个 N 位的十进制非负整数(允许前缀 0),为了防止遗忘, jrMz 曾经将密码记了
    下来。出于保密他没有将密码按原样记录(作死啊= =),于是他将他的密码乘以 E,其中
    E=233……3(共 N-1 个 3),然后将结果的最后 N 位(保留前缀 0)进行记录。看着本来正
    在欣赏他飒爽风姿的 MM(此仅仅是举例,举例!比如说鲁鲁修的妹妹什么的……), jrMz
    只好紧握住你的双手向你求助了。

    输入描述 Input Description

    仅一行,一个 N 位的十进制非负整数,表示密码与 E 的乘积的最后 N 位。

    输出描述 Output Description

    仅一行,一个 N 位的十进制非负整数,表示密码。

    样例输入 Sample Input

    178

    样例输出 Sample Output

    666

    数据范围及提示 Data Size & Hint

    【 Sample Explanation】
    在所有三位十进制非负整数中,只有 666,满足其与 233 的乘积( 155178)的最后 3 位是 178。
    【 Data Size】
    对于 30%的数据, N<=7;
    对于 60%的数据, N<=1,000;
    对于 100%的数据, 3<=N<=1,000,000。

    #include<cstdio>
    
    #include<cstring>
    
    char a[1000010],ans[1000010];
    
    int main(){
    
    scanf("%s",ans);
    
    int n=strlen(ans),g=ans[n-1]-'0',k=0;
    
    for(int i=n-1;i>=0;i--) a[n-i]=ans[i]-'0';
    
    memset(ans,0,sizeof(ans));
    
    for(int i=1;i<=n;i++){
    
    ans[i]+=a[i]*3;
    
    ans[i+1]+=ans[i]/10;
    
    ans[i]=ans[i]%10;
    
    }
    
    ans[n]=(ans[n]+g)%10;
    
    for(int i=1;i<=n;i++){
    
    a[i]=k-ans[i];
    
    if(a[i]<0){a[i]+=10;k=-1;}
    
    }
    
    for(int i=n;i>0;i--) printf("%d",a[i]);
    
    return 0;
    
    }
    
    //origin
    
    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #include<stack>
    #include<map>
    using namespace std;
    int n,a[2000015],b[2000015],c[2000015],d[2000015];
    const int ans[10] = {0,7,4,1,8,5,2,9,6,3};
    inline int getans(int w){
        int cmd = 3;
        for(int i = 1;i <= n;i++){
            if(i == n) cmd = 2;
            if(w == 0) break;
            for(int j = w-1;j < w;j++){
                c[i+j-1] += cmd*b[j];
                c[i+j] += c[i+j-1]/10;
                c[i+j-1] %= 10;
            }
        }
        return ans[(a[w]-c[w]+10)%10];
    }
    int main(){
        n = 0;
        char cmd;
        while(1){
            cmd = getchar();
            if(cmd < 48) break;
            d[++n] = cmd-'0';
        }
        for(int j = n;j >= 1;j--) a[j] = d[n-j+1];
        for(int i = 1;i <= n;i++){
            b[i] = getans(i);
        }
        for(int i = n;i >= 1;i--)printf("%d",b[i]);
        return 0;
    }
  • 相关阅读:
    jsfl 常用自定义方法
    jsfl 常用方法
    Java 跨平台原理
    JDK、JRE 和 JVM 的区别
    win10 中安装 JDK8 以及环境配置
    JDK 14 都已经发布了,Java 8 依然是我的最爱
    DOS 命令大全用法详解
    《Java程序设计基础》 第4章手记
    堆和栈的区别
    CC#JavaPython 基本数据类型比较
  • 原文地址:https://www.cnblogs.com/hyfer/p/5851904.html
Copyright © 2011-2022 走看看