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



  • 相关阅读:
    PHP 5.5.0 Alpha5 发布
    Ubuntu Touch 只是另一个 Android 皮肤?
    MariaDB 10 已经为动态列提供文档说明
    Percona Toolkit 2.1.9 发布,MySQL 管理工具
    Oracle Linux 6.4 发布
    Ruby 2.0.0 首个稳定版本(p0)发布
    Apache Pig 0.11.0 发布,大规模数据分析
    Node.js 0.8.21 稳定版发布
    红薯 MySQL 5.5 和 5.6 默认参数值的差异
    Django 1.5 正式版发布,支持 Python 3
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2367363.html
Copyright © 2011-2022 走看看