zoukankan      html  css  js  c++  java
  • uva 11549

    题面见lrj蓝书。

    这题学习了三个东西。

    1.stringstream

    http://www.cnblogs.com/yohanlong/p/7700281.html

    2.STL太慢。

    3.Floyd判圈算法。

    大意是让两个跑步速度不同的小孩往前跑,如果路径有环,那么跑得快的一定会追上跑得慢的。

    如此便可使跑得快的刚好跑快一步。

    #include <cstdio>
    #include <set>
    #include <sstream>
    #include <cstring>
    #include <string>
    
    using namespace std;
    
    int n, k;
    
    int buf[100];
    int next(int n, int k)
    {
        long long k2 = (long long) k * k;
        int L = 0;
        while (k2 > 0)
        {
            buf[L++] = k2 % 10; k2 /= 10;        
        } 
        n = min(n, L);
        int ans = 0;
        for (int i = 0; i < n; i++)
            ans = ans * 10 + buf[--L];
        return ans;
    }
    
    void solve()
    {
        scanf("%d%d", &n, &k);
        int ans = k;
        int k1 = k, k2 = k;
        do
        {
            k1 = next(n, k1);//慢一点的小孩
            k2 = next(n, k2); if (k2 > ans) ans = k2;//快一点的小孩,跑两步。
            k2 = next(n, k2); if (k2 > ans) ans = k2;
        } while (k1 != k2);
        printf("%d
    ", ans);
    }
    
    int main()
    {
        int t;
        scanf("%d", &t);
        while (t--) solve();
        return 0;
    } 

    速度比较:

    Floyd判圈:160ms

    手动模拟stringstream: 580ms

    裸stringstream:1690ms

    可见如果实在不会写,上STL也是能骗很多分的。

    所以STL要多掌握一些奇技淫巧。

  • 相关阅读:
    Java显示指定类型的文件
    Mysql B-Tree, B+Tree, B*树介绍
    java海量大文件数据处理方式
    RandomAccessFile读取文本简介
    ConcurrentHashMap1.7和1.8的不同实现
    Java并发中的CopyOnWrite容器
    Java阻塞队列的实现
    JVM之Java虚拟机详解
    Spring AOP的实现原理
    SpringMVC工作原理
  • 原文地址:https://www.cnblogs.com/yohanlong/p/7700547.html
Copyright © 2011-2022 走看看