zoukankan      html  css  js  c++  java
  • Masquerade strikes back Gym

    https://vjudge.net/problem/Gym-101911D

    具体思路:

    对于每一个数,假设当前的数是10 分解 4次,首先 1 10 这是一对,然后下一次就记录 10 1,这样的话直接每一个数跑到这个数的一半就可以了,还有一个优化,用一个数组(map会超时)记录当前这个数的分解已经到了哪个地方了。

    AC代码:

    #include<iostream>
    #include<stack>
    #include<queue>
    #include<map>
    #include<stdio.h>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    # define inf 0x3f3f3f3f
    # define ll long long
    # define maxn 200000+1000
    int q[10000000+10];
    int q2[10000000+10];
    int a[maxn];
    struct node
    {
        int x,y;
    } ans[maxn];
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);
        }
        int flag=1;
        for(int i=1; i<=n; i++)
        {
            int k=0;
            if(q2[a[i]]>0)//如果说当前的数可以有直接能用的,直接用就可以了。比如说举得例子,1 10 ,这个时候10 1 也是肯定能用的。
            {
                int t1=q2[a[i]];
                int t2=a[i]/t1;
                ans[i].x=t1;
                ans[i].y=t2;
                q2[a[i]]=0;//取消标记
                k=1;
            }
            else
            {
                while(1)
                {
                    q[a[i]]++;
                    if(q[a[i]]*q[a[i]]>a[i])//如果超过了这个数的根号下的话,后面肯定没有合适的了/。
                    {
                        flag=0;
                        break;
                    }
                    if(a[i]%q[a[i]]==0)
                    {
                        ans[i].x=q[a[i]];
                        ans[i].y=a[i]/q[a[i]];
                        if(ans[i].x!=ans[i].y)。。不要记录重复的
                            q2[a[i]]=a[i]/q[a[i]];
                        k=1;
                        break;
                    }
                }
            }
            if(k==0)flag=0;
        if(flag==0)break;
    }
    if(flag==0)
    {
        printf("NO
    ");
    }
    else
    {
        printf("YES
    ");
        for(int i=1; i<=n; i++)
        {
            printf("%d %d
    ",ans[i].x,ans[i].y);
        }
    }
    return 0;
    }
    
  • 相关阅读:
    HTTP Digest authentication
    HDU 1520 Anniversary party 树形DP
    Servlet过滤器
    Js apply 方法 具体解释
    java 读取固定目录下的文件(和上篇差点儿相同)
    使用nodeitk进行角点检測
    ~/.local/share/Trash/files
    mv,Directory not empty不能目录覆盖
    cp 提示 overwrite 问题
    cv:显示Linux命令运行进度
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262806.html
Copyright © 2011-2022 走看看