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;
    }



  • 相关阅读:
    JVM学习笔记(一)------基本结构
    基于 Android 的 3D 视频样本代码
    Objective-C语法之代码块(block)的使用
    javabean总结
    oncopy和onpaste
    Linux/UNIX之信号(2)
    Html的空格显示
    硬盘的读写原理
    IntentFilter
    MyEclipse配置启动多个Tomcat
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2367363.html
Copyright © 2011-2022 走看看