节约用电

题目链接

https://nanti.jisuanke.com/t/T1742

思路

我觉得这道题是有问题的,题目统计了位置相同的灯,但是答案错了,因为请看给的“标程”。

解释写在里面了。

”标程“

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int a[maxn];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for (int i=0;i<n;i++) {
        scanf("%d",&a[i]);
    }    
    sort(a,a+n);
    int ans=0;
    int last=a[0];
    for (int i=1;i<n-1;i++) {
        printf("%d\n",a[i+1]-last);
        if (a[i+1]-last<=m) {//错误写法,为什么从1开始还跳过了下标为1的灯呢
            ans++;
        }
        else {
            last=a[i];
        }
    }
    printf("%d\n",ans);
    return 0;
}

这里给出我的解法

下面那组数据的答案应该是10

代码

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int maxn=1e6+10;
int a[maxn];
int main()
{
    // freopen("in.txt","r",stdin);
    int n,m,loc,last=-1;
    scanf("%d%d",&n,&m);
    for (int i=0;i<n;i++) {
        scanf("%d",&loc);
        a[loc]++;
        last=max(last,loc);
    }
    int pre=0;
    while (!a[pre]) {
        pre++;
    }
    for (int i=0;i<=last;i++) {
        if (a[i])
            printf("%d ",i);
    }
    // printf("i: %d\n",pre);
    int ans=0,i=pre;
    while (i<last) {
        printf("beg: %d\n",i);
        int r=i+m-1;
        i++;
        while (i<last&&i<=r) {
            if (a[i]) {
                ans+=a[i];
                printf("i a[i] %d %d\n",i,a[i]);
                a[i]=0;

            }
            i++;
        }
        printf("end: %d\n\n",i);
        // printf("ans %d\n",ans);
        while (i<last&&!a[i]) {
            i++;
        }
    }
    printf("%d\n",ans);
    return 0;
}
/*
7 2 
1 2 3 4 4 4 4

8 12 14 15 19 38 39 47 53 69 75 86 100
*/

原文链接: https://www.cnblogs.com/xyqxyq/p/12381851.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    节约用电

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/332695

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午6:37
下一篇 2023年3月1日 下午6:37

相关推荐