zoukankan      html  css  js  c++  java
  • Codeforces #449 Div2 D

    #449 Div2 D

    题意

    交互式类题目。
    起始有 n 张纸,会给出 m 次数字 p ((1 leq p leq c)),每次可选择一张纸,并在纸上写上这个数字,如果纸上已经存在数字,会覆盖掉原来的数字。问不超过 m 次能否使得所有纸上都有数字且不降序排列。

    分析

    这类想法题挺常见的了,观察数据范围 $ left lceil frac{c}{2} ight ceil cdot n leq m$,我们可以这么理解, (n) 张纸,每张最多变 $ left lceil frac{c}{2} ight ceil $ 次。
    考虑对于小于 (left lceil frac{c}{2} ight ceil) 的数字我们从左往右放,否则从右往左放,且保持数字一直有序。考虑最坏的情况,若依次给出数字 ([left lceil frac{c}{2} ight ceil, c]) ,我们都只能填到最右边的纸上,需要改变 (left lceil frac{c}{2} ight ceil) 次,其它纸类似。所以对于题目所给出的数据范围我们的贪心策略是有效的。

    code

    #include<bits/stdc++.h>
    using namespace std;
    int a[1111];
    int main() {
        int n, m, c;
        cin >> n >> m >> c;
        int cnt = 0;
        c = c / 2;
        while(1) {
            int p, pos;
            cin >> p;
            if(p <= c) {
                for(int i = 1; i <= n; i++) {
                    if(!a[i] || a[i] > p) {
                        if(!a[i]) cnt++;
                        a[i] = p;
                        pos = i;
                        break;
                    }
                }
            } else {
                for(int i = n; i >= 1; i--) {
                    if(!a[i] || a[i] < p) {
                        if(!a[i]) cnt++;
                        a[i] = p;
                        pos = i;
                        break;
                    }
                }
            }
            cout << pos << endl;
            fflush(stdout);
            if(cnt == n) break;
        }
        return 0;
    }
    
  • 相关阅读:
    Spring框架(二)
    Spring概况(一)
    唉 规整规整 进阶目录
    网络编程 -- RPC实现原理 -- 目录
    基础大杂烩 -- 目录
    艺多不压身 -- 目录
    延伸 -- 分类 -- 目录
    Eclipse 快捷键
    全局
    深入浅出MySQL++数据库开发、优化与管理维护+第2版+唐汉明 -- 存储引擎
  • 原文地址:https://www.cnblogs.com/ftae/p/7993961.html
Copyright © 2011-2022 走看看