zoukankan      html  css  js  c++  java
  • 多校#4

    1001 -> HDU 5327 Olympiad

    打表签到题。开场4minFB的程度... 

    应该有更优化的方法,为了手速不TLE就行... = =

    1002 -> HDU 5328 ZZX and Permutations

    AP: 等差序列

    GP: 等比序列

    尺取法分别求AP和GP的最长序列长度然后求最大值即可。

    需要注意的是等比时最好用比例相等的方法而不要用除法,因为像如[9 6 4]这个样例会产生精度问题,如果用9*4==6*6就不会又问题啦。当然随之产生的问题是相乘的话可能造成int溢出,所以需要long long存a数组。

    当无法构成三个元素的AP、GP序列时也要输出1或2;

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<iostream>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const int maxn = 1000010;
    ll a[maxn];
    int n;
    
    int AP()
    {
        int ret = 2;
    
        int t1, t2, t3, s;
        s = t1 = 0;
        t2 = 1;
        t3 = 2;
        while(1)
        {
            while(t3 < n && a[t3]-a[t2] == a[t2]-a[t1])
            {
                t1++, t2++, t3++;
            }
            if(t3 >= n)
            {
                ret = max(ret, t3-s);
                break;
            }
            ret = max(ret, t3-s);
            s = t2;
            t1++; t2++; t3++;
        }
        return ret;
    }
    
    int GP() //这里直接复制AP()改一点条件即可
    {
        int ret = 2;
        int t1, t2, t3, s;
        s = t1 = 0;
        t2 = 1;
        t3 = 2;
        while(1)
        {
            //cout << a[t2] << " " << a[t3] << " " << a[t1] << endl;
            while(t3 < n && a[t2]*a[t2] == a[t3]*a[t1])
            {
                t1++, t2++, t3++;
            }
            if(t3 >= n)
            {
                ret = max(ret, t3-s);
                break;
            }
            ret = max(ret, t3-s);
            s = t2;
            t1++; t2++; t3++;
        }
        return ret;
    }
    
    int main()
    {
        int T; scanf("%d", &T);
        while(T--)
        {
            scanf("%d", &n);
            for(int i = 0; i < n; i++) scanf("%lld", &a[i]);
            if(n == 1 || n == 2)
            {
                cout << n << endl;
                continue;
            }
            int ap, gp;
            ap = AP();
            gp = GP();
            cout << max(ap, gp) << endl;
        }
    
        return 0;
    
    }

    待续...

  • 相关阅读:
    如何增加按钮的点击间隔时间
    如何增加button的点击范围
    定时器Timer的使用
    NSCache
    GCD和NSOperation的区别
    NSOperation实现线程间通信
    NSOperation添加操作依赖和监听
    自定义NSOperation
    NSOperation的多线程
    单例的实现(完整版代码)
  • 原文地址:https://www.cnblogs.com/LLGemini/p/4690985.html
Copyright © 2011-2022 走看看