zoukankan      html  css  js  c++  java
  • 牛客网 第十八届浙大城市学院程序设计竞赛(同步赛)J--万万没想到 啦啦啦啦啦

    我觉得我可以继续wa下去(手动魔鬼笑)--------------------------------------------

     

    原题链接https://ac.nowcoder.com/acm/contest/12986/J

    示例1

    输入

    5 1
    5 2 3 4 1

    输出

    0 0 0 0 0
    示例2

    输入

    6 1
    1 1 4 5 1 4

    输出

    0 0 3 4 0 3




    题意
    给定n个数, 每次操作使所有正整数-1, 直到没有任何一个数==k

    思路
    我们的目的是把所有>=k的数操作完后!=k, 那......找到大家减去的数就可了
    另开个数组, 排序, 先找到==k的地方, 后面只要是a[i]-a[i-1]==1, 就res ++;(res为最后所有数减去的值)
    如果有间断使得a[i]-a[i-1]>1, 那么停止进行, res就不再变了.
    a[i]-a[i-1]==0没事, 继续continue计算res就行

    出错点
    对>=k的数操作就行, 我当时是对整体从头开始操作的, 然而, 队友都过了, 这个题, 呜呜呜, 只有我没过


    代码
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    const int N = 1e6 + 10;
    int a[N], b[N];
    
    int main()
    {
        int n, k, res;
        cin >> n >> k;
        
        for(int i = 0; i < n; i ++)
            cin >> a[i], b[i] = a[i];
        sort(b, b + n);
        
        res = 0;
        
        int l = n;
        for(int i = 0; i < n; i ++)
             if(b[i] == k)
             {
                 l = i;
                 res++;//找到了k, 那么就得先-1, 咱总不能找到了最后减去的是0吧
                 break;
             }
        for(int i = l; i < n-1; i ++)
            if(b[i+1] - b[i] == 1)
                 res ++;
           else if(b[i+1]!=b[i])   break;
              
        for(int i = 0; i < n; i ++)
        {
            cout << max(0, a[i] - res);//小于0那输出0, 题目要求
            if(i != n-1)
                printf(" ");
        }       
        return 0;
    }
  • 相关阅读:
    同一账号在不同浏览器不能同时登录
    子页面像父页面传递参数--数组
    bootstaptable动态合并单元格和jxls动态合并单元格
    RedisTemplate的使用
    java项目中读取配置文件
    httpclient调用接口
    drop、truncate和delete的区别
    函数式编程
    常见配置redis.conf介绍
    mysql和redis加入到windows服务
  • 原文地址:https://www.cnblogs.com/la-la-wanf/p/14564799.html
Copyright © 2011-2022 走看看