zoukankan      html  css  js  c++  java
  • CF Gym 100637A Nano alarm-clocks

    题意:给你一些钟的时间,只可以往后调, 问最少调的时间总和是多少

    题解:因为肯定是调到某个出现过时间的,只要枚举时间,在维护一个前缀和快速计算出时间总和就行了。

    #include<cstdio>
    #include<cmath>
    #include<vector>
    #include<map>
    #include<set>
    #include<algorithm>
    #define first fi
    #define second se
    using namespace std;
    typedef long long ll;
    
    const int maxn = 100005;
    const int hmod = 12;
    const ll mmod = 1e6;
    const ll Fac = 1e12;
    const ll tmod = 12e12;//ll
    
    
    
    ll sum[maxn];
    ll times[maxn];
    int main()
    {
        int n;
        scanf("%d",&n);
    
        for(int i = 1; i <= n; i++){
            int th,tm,ts;
            scanf("%d%d%d",&th,&tm,&ts);
            times[i] = th*Fac+tm*mmod+ts;
        }
        sort(times+1,times+1+n);
        for(int i = 1; i <= n; i++)
            sum[i] = sum[i-1]+times[i];
        ll ans = 0x7fffffffffffffffll;
        for(int i = 1; i <= n; i++){
            ll tmp = i*times[i] - sum[i];   //前面的钟拨到time(i)
            tmp += (tmod+times[i])*(n-i)-sum[n]+sum[i];//后面的钟拨到time(i)
            ans = min(ans,tmp);
        }
    
        int ansH,ansM,ansS;
        ansH = ans/Fac; ans -= ansH*Fac;
        ansM = (ans/mmod); ans -= ansM*mmod;
        ansS = ans;
        printf("%d %d %d",ansH,ansM,ansS);
        return 0;
    }
  • 相关阅读:
    luogu_P3195 [HNOI2008]玩具装箱TOY
    CF_837D
    luogu_P3584 [POI2015]LAS
    大一下存活纪实
    Mathematical Logic for Computer Science 读书笔记
    集训补题合集
    图论笔记4 平面图与可平面图
    软件分析笔记3 DFA
    软件分析笔记2 IR
    软件分析笔记1 Intro
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4675986.html
Copyright © 2011-2022 走看看