一道模拟题目

对于所有0 还是 1 我们都可以想象做均为 0 的状态

v[i]表示原来的值

但是对于原来为1的要加上其所在的值作为初始值

然后转化后 a[i] = -v[i]  , 如果原来为0 , 那就直接赋值

我们总是希望将尽可能大的值先加 ,所以将a由大到小排个序 ,  一直加到负数的时候需要考虑这个负数取不取,其实我们最多取一个负数,因为当加了

第一个负数若后面还为负数,那么我们可以将那个负数倒转又加回来即可

但第一个负数取不取也要看它的绝对值是不是比前一个数大,如果大,说明宁可将前一个数再变一次颜色后舍去也不需要加后一个负数

最后我们就确定实际上使用的数了,如果操作数大于这个数,说明超过范围只是不断的将最小的数不断改变颜色

 #include <cstdio>
#include <algorithm>
using namespace std; const int N = ;
int col[N] , v[N] , a[N]; bool cmp(int a , int b)
{
return a>b;
} int main()
{
// freopen("a.in" , "r" , stdin);
int n , m;
while(scanf("%d%d" , &n , &m) == )
{
for(int i = ; i<n ; i++)
scanf("%d" , col+i);
for(int i = ; i<n ; i++)
scanf("%d" , v+i); int val = ;
for(int i= ; i<n ; i++)
if(col[i]){
val += v[i];
a[i] = -v[i];
}
else{
a[i] = v[i];
}
sort(a , a+n , cmp);
for(int i = ; i<n ; i++){
if(a[i] < ){
if(i == ){
n = ;
break;
}
if(-a[i] > a[i-]) n = i;
else n = i+;
break;
}
}
if(m<=n){
for(int i = ; i<m ; i++)
val += a[i];
}
else{
for(int i = ; i<n ; i++){
val += a[i];
}
if((m-n)&) val -= a[n-];
}
printf("%d\n" , val);
}
return ;
}

COJ 1156 Switching bulbs的更多相关文章

  1. Disable the screen switching about VI

    If you want to disable the screen switching, and you don't want tochange your termcap, you can add t ...

  2. Multiprotocol Label Switching (MPLS)

    Posted by: Margaret Rouse WhatIs.com   Contributor(s): Robert Sturt This definition is part of our E ...

  3. ural 1156. Two Rounds

    1156. Two Rounds Time limit: 2.0 secondMemory limit: 64 MB There are two rounds in the Urals Champio ...

  4. FJNU 1156 Fat Brother’s Gorehowl(胖哥的血吼)

    FJNU 1156 Fat Brother’s Gorehowl(胖哥的血吼) Time Limit: 1000MS   Memory Limit: 257792K [Description] [题目 ...

  5. Note for Computer Networks_Circuit Switching & Packet Switching

    Packet Switching: - In a packet switched network data is transmitted in blocks(packets), typically l ...

  6. Cortex-M3 Context Switching

    http://www.embedded.com/design/embedded/4231326/Taking-advantage-of-the-Cortex-M3-s-pre-emptive-cont ...

  7. Codeforces Round #338 (Div. 2) A. Bulbs 水题

    A. Bulbs 题目连接: http://www.codeforces.com/contest/615/problem/A Description Vasya wants to turn on Ch ...

  8. HDU 5601 N*M bulbs 找规律

    N*M bulbs 题目连接: http://codeforces.com/contest/510/problem/C Description NM个灯泡排成一片,也就是排成一个NM的矩形,有些开着, ...

  9. BestCoder Round #67 (div.2) N bulbs(hdu 5600)

    N bulbs Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

随机推荐

  1. [Swift通天遁地]一、超级工具-(15)使用SCLAlertView制作强大的Alert警告窗口和Input编辑窗口

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. [Swift]关键字:Self、self与super

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  3. 在CentOS下安装VMware tool

    VMware tools是虚拟机VMware Workstation自带的一款工具.它的作用就是使用户可以从物理主机直接往虚拟机里面拖文件.如果不安装它,我们是无法进行虚拟机和物理机之间的文件传输的. ...

  4. Deepfakes教程及各个换脸软件下载

    源:https://blog.csdn.net/koest/article/details/80720078 Deepfakes目前用于深度换脸的程序基本都是用python编程语言基于tensorfl ...

  5. PHP 操作数据库乱码 以及调试

    mysql> show create database pxscj;+----------+--------------------------------------------------- ...

  6. WPF 添加 gif 图片

    1. 如何在wpf窗体中添加gif动态图片: https://stackoverflow.com/questions/210922/how-do-i-get-an-animated-gif-to-wo ...

  7. java简单打印金字塔(案例)

    学习编程语言,打印简单的金字塔是基础的案例,在这里就简单的写了个案例,希望能帮助到各位 代码 效果 class  kinTa{    public static void main(String[] ...

  8. 6.12---前提两个对象的成员必须一致,才能将有数据的对象将数据传给反射获取的对象conver(有数据对象,目标对象)

    //// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)/ ...

  9. [ CodeForces 1059 C ] Sequence Transformation

    \(\\\) \(Description\) 你现在有大小为\(N\)的一个数集,数字分别为 \(1,2,3,...N\) ,进行\(N\)轮一下操作: 输出当前数集内所有数的\(GCD\) 从数集中 ...

  10. opencv识别验证码的教程和资料

    简书教程:https://www.jianshu.com/p/41127bf90ca9 博客园教程(较详细):https://www.cnblogs.com/qqandfqr/p/7866650.ht ...