C - Code Cleanups

The management of the software company JunkCode has recently found, much to their surprise and disappointment, that productivity has gone down since they implemented their enhanced set of coding guidelines. The idea was that all developers should make sure that every code change they push to the master branch of their software repository strictly follows the coding guidelines. After all, one of the developers, Perikles, has been doing this since long before these regulations became effective so how hard could it be?
Rather than investing a lot of time figuring out why this degradation in productivity occurred, the line manager suggests that they loosen their requirement: developers can push code that weakly violates the guidelines as long as they run cleanup phases on the code from time to time to make sure the repository is tidy.

She suggests a metric where the “dirtiness” of a developer’s code is the sum of the pushes that violate the guidelines – so-called dirty pushes – made by that developer, each weighted by the number of days since it was pushed. The number of days since a dirty push is a step function that increases by one each midnight following the push. Hence, if a developer has made dirty pushes on days 1, 2, and 5, the dirtiness on day 6 is 5+4+1=10. She suggests that a cleanup phase, completely fixing all violations of the coding guidelines, must be completed before the dirtiness reaches 20. One of the developers, Petra, senses that this rule must be obeyed not only because it is a company policy. Breaking it will also result in awkward meetings with a lot of concerned managers who all want to know why she cannot be more like Perikles? Still, she wants to run the cleanup phase as seldomly as possible, and always postpones it until it is absolutely necessary. A cleanup phase is always run at the end of the day and fixes every dirty push done up to and including that day. Since all developers are shuffled to new projects at the start of each year, no dirtiness should be left after midnight at the end of new year’s eve.

Input
The first line of input contains an integer n (1≤n≤365), the number of dirty pushes made by Petra during a year. The second line contains n integers d1,d2,…,dn (1≤di≤365 for each 1≤i≤n) giving the days when Petra made dirty pushes. You can assume that di<dj for i<j.

Output
Output the total number of cleanup phases needed for Petra to keep the dirtiness strictly below 20 at all times.

Sample Input 1 Sample Output 1
5
1 45 65 84 346
4
Sample Input 2 Sample Output 2
3
310 330 350
3
题解:垃圾是一个累加的过程,垃圾超过20之前就进行清理,然后最后进行特判,即使未超过二十也要清理。

#include <bits/stdc++.h>
using namespace std;
#define ll long long int
const int inf = 0x3f3f3f3f;
const int maxn = 1e5 + 7;
int a[maxn];
int c[maxn];
int day[maxn];
int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
     {
        cin >> a[i];
        day[a[i]]++;//标记。
     }
    ll sum = 0;
    ll ans = 0;
    ll summ = 0;
    for (int i = 1; i <= 365; i++)
    {
        sum += day[i];
        summ += sum;//这两步操作完成了累加。
        if (summ >= 20)//大于二十进行更新。
        {
            ans++;
            sum = 0;
            summ = 0;
        }
    }
    if(summ!=0)
        ans++;//最后若垃圾清理不完进行清理。
    cout << ans << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值