HDU 5186 || 模拟map

模拟不进位的加法。

昨天晚上比赛的时候脑子估计被驴踢了 = = 一直map不出来,今早map出来了g++,超时,c++过,

加了各手写输入,结果c++挂了,g++过,一题水题反正把我弄得很坎坷,把危险代码该了一下这下都过了。

还是不懂g++,和c++的不同之处,有空了解一下,后来把代码改成最土的那个模拟方法过了。

果然只求过就好了,不要弄太那啥 = = 都是自己作。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
int ans[300];
char str[300];
int n,b;
map<char,int>toINT;
map<int,char>toCHAR;
int i,j;
void init()
{
     for( i = 0;i< 10;++i )
     {
         toINT[ '0' + i ] = i;
         toCHAR[ i ] = '0' +i;
     }
     for( i = 0; i< 26; ++i )
     {
         toINT[ 'a' + i ] = i+10;
         toCHAR[ i + 10 ] = 'a' + i;
     }
}
int main()
{
    init();
    while( ~scanf("%d %d",&n,&b) )
    {
        memset(ans,0,sizeof(ans));
        int ml = 0;
        str[0] = '\0';
        while( n-- )
        {
            scanf("%s",str);

            int len = strlen(str)-1;
            ml = ml > len? ml : len;
            for( i = len ,j=0; i>=0 ;--i,j++ )
                ans[ j ] = ( toINT[str[i]] + ans[j] ) %b;

        }
        for( i = ml; i>=0 ; --i )
            if( ans[i] !=0)
                break;
        if( i < 0)
            puts("0");
        else
        {
            for(;i>=0;--i)
                putchar( toCHAR[ ans[i] ] );
            puts("");
        }

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值