您的位置:首页 > 其它

USACO:Your Ride is here

2013-08-06 16:17 363 查看
#include <stdio.h>

long Calculate(char name[]);

int main()

{

    char CometName[10], GroupName[10];

    freopen("ride.in", "r", stdin);

    freopen("ride.out", "w", stdout);

    scanf("%s", CometName);

    scanf("%s", GroupName);

    if((Calculate(CometName) % 47) == (Calculate(GroupName) %47))

                             printf("GO\n");

    else                     printf("STAY\n");

    fclose(stdin);

    fclose(stdout);

    return 0;

}

long Calculate(char name[])

{

     int i;

     long res=1;

     for(i=0; name[i]!='\0'; ++i)

     {

              res*=(name[i]-'A'+1);

     }

     return res;
}

4. 模运算规则, 模运算与基本四则运算有些相似,但是除法例外。其规则如下

   (a + b) % n = (a % n + b % n) % n            (1)

   (a - b) % n = (a % n - b % n) % n            (2) 

   (a * b) % n = (a % n * b % n) % n            (3)

    ab % n = ((a % n)b) % n                      (4)

(1)式证明

∵ a = k1*n + r1

   b = k2*n + r2

  a % n = r1

  b % n = r2

∴(a+b) % n = ((k1+k2)*n + (r1+r2)) % n = (r1+r2) % n = (a % n + b % n)% n

    得证

(2)式证明同上

(3)式证明

     a = k1*n + r1

     b = k2*n + r2

     (a*b) % n = (k1k2n2 + (k1r2+k2r1)n + r1r2) % n = r1r2 % n = (a %n * b %n ) % n

 (4)式证明

      设 a % n = r

      ab %n= (a * a * a * a…*a) %n = (a %n * a %n * a %n * … * a %n) %n = rb % n = ((a % n) b) % n

  

模运算看起来不是很直观,但是可以用来推导出一些有用的东西。 例如(4)式可以用来降幂运算,例如计算6265 % 133,直接计算的话需要算出6265 利用(4)式可以进行降幂运算。

  6265 % 133

  = 62 * 6264 % 133

  = 62 * (622)32 % 133

  = 62 * 384432 % 133

  = 62 * (3844 % 133)32 % 133

  = 62 * 12032 % 133

  = 62 * 3616 % 133

  = 62 * 998 % 133

  = 62 * 924 % 133

  = 62 * 852 % 133

  = 62 * 43 % 133

  = 2666 % 133

  = 6
----摘自http://www.cnblogs.com/jojoke/archive/2007/12/17/1003594.html

所以修改版本为

#include <stdio.h>

long Calculate(char name[]);

int main()

{

    char CometName[10], GroupName[10];

    freopen("ride.in", "r", stdin);

    freopen("ride.out", "w", stdout);

    scanf("%s", CometName);

    scanf("%s", GroupName);

    if(Calculate(CometName) == Calculate(GroupName))

                             printf("GO\n");

    else                     printf("STAY\n");

    fclose(stdin);

    fclose(stdout);

    return 0;

}

long Calculate(char name[])

{

     int i;

     long res=1;

     for(i=0; name[i]!='\0'; ++i)

     {

              res*=((name[i]-'A'+1) % 47);

     }

     return res % 47;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  USACO