【题目链接】:https://csacademy.com/contest/round-36/task/socks-pairs/

【题意】



给你n种颜色的袜子,每种颜色颜色的袜子有ai只;

假设你在取袜子的时候不看取出来的是什么颜色,也不看抽屉里面;

问你最少要取多少只,才能保证,里面至少有k双袜子;

【题解】



先特判无解的情况;

若∑a[i]2<k,则无解;

如果有解;

则,先每种颜色的袜子都取一只;

这是最坏的情况了;

接下来,每种颜色的袜子都连续两双的取;

比如现在你有3只袜子了,一共也只有3种颜色的袜子供选;

你所拥有的3只,每只的颜色都不同;

然后再让你取;

你肯定是某种颜色的袜子再连续取2只;

这样,2只才贡献一个新的颜色;

而不是选两个不同的颜色,那样两只就贡献两个颜色了,不是最坏情况;

这样,我们先把所有的a[i]都减去1;

然后每种袜子都两只两只地取;

(奇数的话,1留着);

如果这样取够k双袜子了,则输出(k-1)*2+n+1

这里(k-1)*2表示取(k-1)次两双两双的情况,n是一开始取的n只不同颜色的袜子;

这时再取一只,就能保证有k只袜子了;

如果这样取不够k只袜子;

因为我们已经判断过有解,则减过1之后为奇数的a[i],选完之后,就只剩一只袜子可以选了,这里的1只的个数肯定够凑满k双袜子了,只不过选一只就要增加一对了..

这也是为什么它要放在连续两只后再考虑的原因;

这种情况下答案为已选的袜子对数*2+n+k-已选的袜子对数



【Number Of WA】



3



【反思】



比赛的时候完全没想到,每种袜子都是独立的,可以分开来连续两只地选.

以为要全都一样的数量一起两只两只选.

思维僵化…

最后稀里糊涂地就水过了。。



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1e5; int n,k;
LL a[N+100],d[N+100],tans = 0; void sp(){
LL cnt = 0;
rep1(i,1,n) cnt = cnt + a[i]/2;
if (cnt < k){
cout << -1 << endl;
exit(0);
}
} int main(){
//Open();
Close();
cin >> n >> k;
rep1(i,1,n)
cin >> a[i];
sp();
rep1(i,1,n) a[i]--;
LL now = 0;
rep1(i,1,n){
now += a[i]/2;
tans += a[i]/2*2;
}
if (now >= k){
cout << (k-1)*2 + n + 1 << endl;
}else{
cout << tans + k - now << endl;
}
return 0;
}

【Round #36 (Div. 2 only) C】Socks Pairs的更多相关文章

  1. 【Round #36 (Div. 2 only) B】Safe Spots

    [题目链接]:https://csacademy.com/contest/round-36/task/safe-spots/ [题意] 给你n个数字构成的序列; 每个位置上的数都由0和1组成; 对于每 ...

  2. 【CS Round #36 (Div. 2 only) A】Bicycle Rental

    [题目链接]:https://csacademy.com/contest/round-36/task/bicycle-rental/ [题意] 让你从n辆车中选一辆车; 每一辆车有3个属性 1.到达车 ...

  3. Codeforces Round #262 (Div. 2) A. Vasya and Socks【暴力/模拟/袜子在可以在合法情况下增加后用几天】

    A. Vasya and Socks time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  4. 【CS Round #37 (Div. 2 only) D】Reconstruct Graph

    [Link]:https://csacademy.com/contest/round-37/task/reconstruct-graph/statement/ [Description] 给你一张图; ...

  5. 【CS Round #37 (Div. 2 only) B】Group Split

    [Link]:https://csacademy.com/contest/round-37/task/group-split/ [Description] 让你把一个数分成两个数a.b的和; (a,b ...

  6. 【CS Round #37 (Div. 2 only) A】Boring Number

    [Link]:https://csacademy.com/contest/round-37/task/boring-number/ [Description] 让你找离平均数最近的一个数的下标; [S ...

  7. 【CS Round #39 (Div. 2 only) D】Seven-segment Display

    [Link]:https://csacademy.com/contest/round-39/task/seven-segment-display/ [Description] 0..9各自有一个数字, ...

  8. 【CS Round #39 (Div. 2 only) C】Reconstruct Sum

    [Link]:https://csacademy.com/contest/round-39/task/reconstruct-sum/ [Description] 给你一个数字S; 让你找有多少对A, ...

  9. 【CS Round #39 (Div. 2 only) B】Circle Elimination

    [Link]:https://csacademy.com/contest/round-39/task/circle-elimination/ [Description] [Solution] 把n个点 ...

随机推荐

  1. SSH框架下的多表增删改查

    下载地址:SSH框架下的多表增删改查 点击进入码云Git下载 点击进入CSDN下载 项目结构: 项目代码就不全部贴出来了,只贴下核心代码.需要项目的自己可以去下载. package com.atgui ...

  2. SQL 中多个 and or 的组合运算

    sql关系型运算符优先级高到低为:not >and> or AND.OR运算符的组合使用 在WHERE子句中,通过AND.OR运算符可以同时连接多个条件,当然AND.OR运算符也可以同时使 ...

  3. pgpool-II在故障切换过程中是如何选举新主节点的

    在pgpool的源代码中有有一个pgpool_main.c文件,在该文件中有一个pgpool的主函数pgpoolmain控制着pgpool的运行及相关操作. libpcp_ext.h文件中定义了pgp ...

  4. uva 11584 - 字符串 dp

    题目链接 一个长度1000的字符串最少划分为几个回文字符串 ---------------------------------------------------------------------- ...

  5. SpringCloud学习笔记(13)----Spring Cloud Netflix之Hystrix断路器的隔离策略

    说明 : 1.Hystrix通过舱壁模式来隔离限制依赖的并发量和阻塞扩散 2. Hystrix提供了两种隔离策略:线程池(THREAD)和信号量隔离SEMAPHORE). 1. 线程池隔离(默认策略模 ...

  6. OUTLOOK网站直接点击发送邮件

    下面的样式是用文字来做链接的:<a href="mailto:邮箱地址" alt="点击此链接给我写信">网页上显示的文字</a> 下面 ...

  7. Acme Corporation UVA - 11613 费用流

    Code: #include<cstdio> #include<cstring> #include<vector> #include<queue> #i ...

  8. POJ1743Musical Theme(后缀数组+二分)

    题意 有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1..88范围内的整数,现在要找一个重复的主题.“主题”是整个音符序列的一个子串,它需要满足如下条件: 1 ...

  9. redhat 7 cenos 7 网络配置文件

    Cenos 7 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no DEFROUTE=yes IPV4_FAILURE_FATAL=no NAME=eth0 ...

  10. URAL 2027 2028 两个有趣的题

    这两个题,讲的是有一种奇怪的语言,代码是一种二维的矩阵. 前一个题,是根据所给的要求,写一个简单的解释器. 后一个题,是用那种语言写一个简单的小程序. 挺有意思的,所以在这里纪念一下.顺便那个语言的原 ...