zoukankan      html  css  js  c++  java
  • POJ 1152 An Easy Problem! (取模运算性质)

    题目链接:POJ 1152 An Easy Problem!

    题意:求一个N进制的数R。保证R能被(N-1)整除时最小的N。

    第一反应是暴力。N的大小0到62。发现当中将N进制话成10进制时,数据会溢出。

    这里有个整除,即(N-1)取模为0。

    样例:a1a2a3表示一个N进制的数R。化成10进制:

    (a1*N*N+a2*N+a3)%(N-1)==((a1*N*N)%(N-1)+(a2*N)%(N-1)+(a3)%(N-1))%(N-1)==(a1+a2+a3)%(N-1)。

    这样防止了数据的溢出。



    AC代码:


    #include<stdio.h>
    #include<string.h>
    #define ll __int64
    #include<map>
    using namespace std;
    map<char,ll> mm;
    
    int main()
    {
    	ll max,ans;
    	ll n,i,len;
    	char s[100]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    	char ss[50000+10];
    	mm.clear();
    	for(i=0;i<strlen(s);i++)
    	{
    		mm[s[i]]=i;
    		//printf("(%c %d)
    ",s[i],mm[s[i]]);
    	}
    	while(scanf("%s",ss)!=EOF)
    	{
    		len=strlen(ss);
    		ans=0;
    		max=2;
    		for(i=0;i<len;i++)
    		{
    			if(max<mm[ss[i]])
    				max=mm[ss[i]];
    			ans+=mm[ss[i]];
    		}
    		for(i=max+1;i<63;i++)
    		{
    			if(ans%(i-1)==0)
    				break;
    		}
    		if(i>=63)
    			printf("such number is impossible!
    ");
    		else
    			printf("%d
    ",i);
    	}
    	return 0;
    }


  • 相关阅读:
    #pragma
    STL~heap
    codeforces682A
    POJ1753(位操作和枚举)
    位运算
    getchar()(转)
    UVA2636
    UVA2639
    UVA2322
    UVa2521
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7161499.html
Copyright © 2011-2022 走看看