zoukankan      html  css  js  c++  java
  • csu 1233 病毒的复制

    /* WA,对测试示例结果正确,不解 */

    已通过,原因是%I64d的使用不符合编译器的要求,百度了一下,这个问题早就有了……

    非常感谢Staginner大牛的帮助!

    变量定义输出方式gcc(mingw32)g++(mingw32)gcc(linux i386)g++(linux i386)MicrosoftVisual C++ 6.0
    long long “%lld” 错误 错误 正确 正确 无法编译
    long long “%I64d” 正确 正确 错误 错误 无法编译
    __int64 “lld” 错误 错误 无法编译 无法编译 错误
    __int64 “%I64d” 正确 正确 无法编译 无法编译 正确
    long long cout 非C++ 正确 非C++ 正确 无法编译
    __int64 cout 非C++ 正确 非C++ 无法编译 无法编译
    long long printint64() 正确 正确 正确 正确 无法编译

    (以上表格来自C/C++的64位整型 不同编译器间的比较原上草),详见该文)

    我的第一道矩阵幂乘,表示二进制给人确实能带来很多启发。。

    /* csu 1233 */
    # include <stdio.h>
    # define MAX 1000003

    typedef struct Matrix
    {
    long long a,b;
    long long c,d;
    } matrix;

    long long x[2], t;

    int solve(matrix mat)
    {
    int tot;  /* 原为int tot, i;CE了,提示:i定义了但未使用。真是强大啊!我用的CB没有提示这个*/
    matrix cur, cross, tmp;

    cur = mat;
    if (t & 0x1) cross = cur;
    else
    {
    cross.a = cross.d = 1;
    cross.b = cross.c = 0;
    }

    while (t>0)
    {
    t >>= 1;
    // cur = cur L* cur; err: 变量值变化了
    tmp = cur;
    cur.a = (tmp.a*tmp.a+tmp.b*tmp.c) % MAX;
    cur.b = (tmp.b*(tmp.a+tmp.d)) % MAX;
    cur.c = (tmp.c*(tmp.a+tmp.d)) % MAX;
    cur.d = (tmp.d*tmp.d+tmp.b*tmp.c) % MAX;

    // cross = cross L* cur;
    tmp = cross;
    if (t & 0x1)
    {
    cross.a = (tmp.a*cur.a+tmp.b*cur.c) % MAX;
    cross.b = (tmp.a*cur.b+tmp.b*cur.d) % MAX;
    cross.c = (tmp.c*cur.a+tmp.d*cur.c) % MAX;
    cross.d = (tmp.c*cur.b+tmp.d*cur.d) % MAX;
    }
    }

    tot = (int)((cross.a*x[0]+cross.b*x[1]+cross.c*x[0]+cross.d*x[1])%MAX);

    return tot;
    }

    int main()
    {
    int tot;
    matrix mat;

    // freopen("in.txt", "r", stdin);
    // freopen("out.txt", "w", stdout);

    while (~scanf("%Illd%lld%lld%lld%lld%lld%lld", &x[0],&x[1],&mat.a,&mat.c,&mat.b,&mat.d,&t))
        /*
          原为 while(~scanf("%I64d%I64d%I64d%I64d%I64d%I64d%I64d",...
        */ 
    {
    tot = solve(mat);
    printf("%d\n", tot);
    }

    return 0;
    }



  • 相关阅读:
    在Selenium自动化中查找损坏的链接
    WebDriverManager
    在TestNG中重试失败的测试
    算法:汉诺塔
    Java 多线程
    spring ioc原理(看完后大家可以自己写一个spring)
    Apache与Nginx的区别
    Apache与Nginx的区分比较
    Java 设计模式
    Java 理论与实践: 正确使用 Volatile 变量
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2367363.html
Copyright © 2011-2022 走看看