zoukankan      html  css  js  c++  java
  • USACOArithmetic Progressions

    http://ace.delos.com/usacoprob2?a=WNyvQo2qbjE&S=ariprog

    额。。。比较水的题,综合起来有两种做法,一种是先算出所有的双平方数,然后在这个集合中枚举a,b。另一种是直接枚举a,b,然后再逐一判断是否为双平方数,不过这种方法超时的风险很大,要很多剪枝才行。

    鄙人果断方法一了。方法一如果不加入剪枝,5秒也是够呛的。而最简单有效的剪枝就是当a+b(n-1)>m时,根本不用再做下去了。

    对了,这里我发现了原来freopen是定义在cstdio头文件中的,一直不知道T_T

    #include <iostream>
    #include <string>
    #include <cstdio>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    
    bool f[2500005]={0};
    int n,m,sum=0;
    struct node{
        int aa,bb;
        friend bool operator < (node a,node b)
        {
            return a.bb<b.bb;        //按照b的大小来排序
        }
    };
    
    void init()
    {
        cin>>n>>m;
        for (int p=0;p<=m;p++)
            for (int q=p;q<=m;q++)
                f[p*p+q*q]=true;         //直接用hash表,简单方便
    
    }
    
    node rr[10005];
    void work()
    {
        int h=0,dd=0,k,sum=0,mm=2*m*m;
        for (int a=0;a<=mm;a++)         //a,b的次序可以交换,但是如果b在前a在后则剪枝不方便了
        if (f[a])
        {
            for (int b=1;b<mm;b++)
            {
                if (a+b*(n-1)>mm) break;     //一个简单而强悍的剪枝,这里要是break,若是continue就根本没剪到了
                h=a; dd=b; k=0;
                while (f[h] && k<n)
                {
                    k++;
                    h=h+dd;
                }
                if (k==n) 
                {
                    rr[++sum].aa=a;
                    rr[sum].bb=b;
                }
            }
        }
        sort(rr+1,rr+sum+1);
        if (!sum) cout<<"NONE"<<endl;
        for (int i=1;i<=sum;i++)
            cout<<rr[i].aa<<" "<<rr[i].bb<<endl;
        return;
    }
    
    int main()
    {
        freopen("ariprog.in","r",stdin);
        freopen("ariprog.out","w",stdout);
        init();
        work();
        return 0;
    }
  • 相关阅读:
    团队开发冲刺第二阶段_1
    团队开发冲刺第一阶段_7
    mysql 官方集群
    Tomcat提高并发
    Percona XtraDB Cluster 5.7
    Mysql常用配置及优化
    Linux 常用命令
    数据库主从复制
    Linux 环境下Web环境搭建————ActiveMQ
    Linux 下Web环境搭建————redis
  • 原文地址:https://www.cnblogs.com/ay27/p/2718735.html
Copyright © 2011-2022 走看看