zoukankan      html  css  js  c++  java
  • 2018 Multi-University Training Contest 1

    比赛链接:2018 Multi-University Training Contest 1

    6301 Distinct Values

    题意:输出一个长度为n的序列,要求满足m个区间的数都不相同,并且字典序最小

    思路:首先在草稿纸上模拟填充过程,从左往右填充,发现规律,有最小的数则取出最小的数。越过某些区间时,某些数字又可以重复使用利用set来维护这个待取出的集合

    代码:

    #include<cstdio>
    #include<iostream>
    #include<set>
    using namespace std;
    const int maxn=1e5+10;
    int pre[maxn],ans[maxn];
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
    
            int n,m;
            scanf("%d %d",&n,&m);
            for(int i=1;i<=n;i++)
            {
                ans[i]=1;
                pre[i]=i;
            }
    
            for(int i=1;i<=m;i++)
            {
                int a,b;
                scanf("%d %d",&a,&b);
                pre[b]=min(pre[b],a);
               // cout<<a<<" "<<b<<endl;
            }
    
            for(int i=n-1;i>=1;i--)
            {
                pre[i]=min(pre[i],pre[i+1]);
            }
            set<int>M;
            for(int i=2;i<=n;i++)M.insert(i);
            ans[1]=1;
            for(int i=2;i<=n;i++)
            {
                for(int j=pre[i-1];j<pre[i];j++)
                {
                    M.insert(ans[j]);
                }
                ans[i]=*M.begin();
                M.erase(ans[i]);
            }
           for(int i=1;i<=n;i++)
                printf("%d%c",ans[i]," 
    "[i==n]);
        }
        return 0;
    }
    

      

    6308 Time Zone

    题意:给出时间和时区,转换成UTC+8的时间

    思路:将所有的时间都转换成分钟,输出用%02d,可是当时卡在了精度上面   

    double mm=off*60.0-480.0将时间偏差转化成分钟

    mm转化成整数时,由于精度损失,1.0可能被表示成0.99999,导致1.0变成0(一般精度损失是减小原数字)

    特别注意:当mm为正数时,需要将mm先加0.00001,而mm为负数是应该减掉0.00001

    ac代码:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int main()
    {
        int T,h,m;
        double off;
        cin>>T;
        while(T--)
        {
            scanf("%d %d UTC%lf",&h,&m,&off);
            double mm=off*60.0-480.0;
            int mk;
            if(mm>0)mk=mm+0.0001;
            else mk=mm-0.0001;
            int now=h*60+m+mk;
            if(now>=0)now%=(24*60);
            else now+=(24*60);
            printf("%02d:%02d
    ",now/60,now%60);
        }
        return 0;
    }
    

      

  • 相关阅读:
    HDU 3951 (博弈) Coin Game
    HDU 3863 (博弈) No Gambling
    HDU 3544 (不平等博弈) Alice's Game
    POJ 3225 (线段树 区间更新) Help with Intervals
    POJ 2528 (线段树 离散化) Mayor's posters
    POJ 3468 (线段树 区间增减) A Simple Problem with Integers
    HDU 1698 (线段树 区间更新) Just a Hook
    POJ (线段树) Who Gets the Most Candies?
    POJ 2828 (线段树 单点更新) Buy Tickets
    HDU 2795 (线段树 单点更新) Billboard
  • 原文地址:https://www.cnblogs.com/carcar/p/9487880.html
Copyright © 2011-2022 走看看