• 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;
    }
    

      

  • 相关阅读:
    称重量
    计算机网络
    进程间的通信方式与区别
    求两IP是否在同一局域网(运子网掩码用)
    Linux Redhat7 磁盘阵列基本原理
    Linux Redhat7更改root用户密码
    更改Linuxshell类型
    linux系统下的/var/spool/mail/root
    centos 解决"不在 sudoers 文件中。此事将被报告
    redhat 7 安装图形界面
  • 原文地址:https://www.cnblogs.com/carcar/p/9487880.html
Copyright © 2020-2023  润新知