CF1242C. Sum Balance
题目描述
k组数,每组ni个,数互不相同
把每组数中的一个移到其他组(或者不移动),使得最终每组数的个数不变且总和相等
k<=15,ni<=5000
题解
最终的移动关系一定为若干个环
枚举每个环的起点,找到一个数补上去使得和等于平均值
因为互不相同,所以出边(找到的数)唯一
判断是否能成环,并且把对应的选择方案记下
预处理的时间为O(k*∑ni)
最后O(3^n)dp即可
code
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
using namespace std;
struct type{
int s,x,y;
} a[75001];
int p[16]={0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384};
int b[16][5001];
int c[16];
int d[32768][16][2]; //d[][1][1] is special
int d2[16][2];
bool bz[16];
bool f[32768];
int g[32768];
int ans[16][2];
int D[16];
int n,I,J,i,j,k,l,len,S,s,L,tot;
long long Sum[16];
long long sum;
bool cmp(type a,type b)
{
return a.s<b.s;
}
int get(long long t)
{
int l=1,r=len,mid;
while (l<r)
{
mid=(l+r)/2;
if (a[mid].s<t)
l=mid+1;
else
r=mid;
}
if (a[l].s==t)
return l;
return -1;
}
int main()
{
// freopen("c.in","r",stdin);
scanf("%d",&n);L=p[n]*2-1;
fo(i,1,n)
{
scanf("%d",&c[i]);
fo(j,1,c[i])
scanf("%d",&b[i][j]),a[++len]={b[i][j],i,j},sum+=b[i][j],Sum[i]+=b[i][j];
}
if (sum%n)
{
printf("No\n");
return 0;
}
sum/=n;
sort(a+1,a+len+1,cmp);
fo(I,1,n)
{
fo(J,1,c[I])
{
memset(bz,0,sizeof(bz));
S=p[I];
tot=1;
d2[1][0]=I;
d2[1][1]=b[I][J];
j=I;
s=b[I][J];
l=get(sum-(Sum[j]-s));
while (!bz[j])
{
bz[j]=1;
if (l==-1 || bz[a[l].x])
break;
j=a[l].x;
s=a[l].s;
S|=p[j];
++tot;
d2[tot][0]=j;
d2[tot][1]=l;
l=get(sum-(Sum[j]-s));
}
if (l!=-1 && a[l].x==I && a[l].y==J)
{
f[S]=1;
fo(j,1,tot)
{
d[S][j][0]=d2[j][0];
d[S][j][1]=d2[j][1];
}
}
}
}
fo(i,1,L)
{
if (f[i])
g[i]=i;
else
{
for (j=(i-1)&i; j; j=(j-1)&i)
if (f[j] && g[i^j])
{
g[i]=j;
break;
}
}
}
if (g[L])
{
for (j=L; j; j^=g[j])
{
tot=0;
fo(i,1,n)
if (g[j]&p[i])
++tot;
ans[d[g[j]][1][0]][0]=d[g[j]][tot][0];
ans[d[g[j]][1][0]][1]=d[g[j]][1][1];
fo(i,2,tot)
{
ans[d[g[j]][i][0]][0]=d[g[j]][i-1][0];
ans[d[g[j]][i][0]][1]=a[d[g[j]][i][1]].s;
}
}
printf("Yes\n");
fo(i,1,n)
printf("%d %d\n",ans[i][1],ans[i][0]);
}
else
printf("No\n");
}
CF1242C. Sum Balance的更多相关文章
- Codeforces Round #599 (Div. 1) C. Sum Balance 图论 dp
C. Sum Balance Ujan has a lot of numbers in his boxes. He likes order and balance, so he decided to ...
- Codeforces Round #599 (Div. 2) E. Sum Balance
这题写起来真的有点麻烦,按照官方题解的写法 先建图,然后求强连通分量,然后判断掉不符合条件的换 最后做dp转移即可 虽然看起来复杂度很高,但是n只有15,所以问题不大 #include <ios ...
- [Codeforces 1242C]Sum Balance
Description 题库链接 给你 \(k\) 个盒子,第 \(i\) 个盒子中有 \(n_i\) 个数,第 \(j\) 个数为 \(x_{i,j}\).现在让你进行 \(k\) 次操作,第 \( ...
- SQL Server 中存储过程的练习
建库建表建约束 插入数据 --建库建表建约束和插入测试数据 use bankDB go --1.完成存款,取款业务--存款 create proc usp_takeMoney ),),)=null,@ ...
- order_by_、group_by_、having的用法区别
写于 2012-11-20 22:14 doc文档上. Having 这个是用在聚合函数的用法.当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算.运算完后 ...
- [POJ] #1004# Financial Management : 浮点数运算
一. 题目 Financial Management Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 173910 Acc ...
- HW4.7
public class Solution { public static void main(String[] args) { double rate = 0.05; double balance ...
- pubwin会员合并
此博文已移至爬不稳独立博客:www.pubwin2009.net连接:http://www.pubwin2009.net/index.php/post/15.html 我们说下过程(这里,我们要求两个 ...
- 事务,Oracle,MySQL及Spring事务隔离级别
一.什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 二.事务特性(4种): 原子性 (atomicity):强调事务的不可分割:一致性 (consiste ...
随机推荐
- 【转】WEB技术发展简史
[转]WEB技术发展简史 一.Web技术发展的第一阶段——静态文档 第一阶段的Web,主要是用于静态Web页面的浏览.用户使用客户机端的Web浏览器,可以访问Internet上各个Web站点,在每一个 ...
- Python 类的私有属性与私有方法
1.隐藏的使用场景 在Python类中,有些属性和方法只希望在对象的内部被使用,而不希望在外部被访问到, 2.定义方式, 在属性名或方法名前增加两个下划线,定义的就是私有属性或方法 #其实这仅仅这是一 ...
- ideal项目启动及问题
Error running 'xxx项目' Command line is too long(idea版) 错误] Error running ‘xxx项目’: Command line is too ...
- Elasticsearch-集群增加节点
ES-在集群中加入节点 查看分片信息 FengZhendeMacBook-Pro:nacos FengZhen$ curl 'localhost:9200/_cat/shards?v' index s ...
- 插入排序--python
import random def insert_sort(nums): # 排序趟数 for i in range(1, len(nums)): current = nums[i] pre_inde ...
- 小记-----一些linux操作小操作
lrzsz工具 window系统与linux系统 文件互传 1.在linux系统命令行:sudo yum install lrzsz 或者 yum install lrzsz (输入一个 ...
- 【2019CSP-S游记】咕了好久了撒
对,证书已经发下来了,我才想起来写游记(虽然我个蒟蒻明明就是在写反思) 终于和父母商议好了以后怎么办,顺带找了一下班主任,在机房的电脑敲出来的(我来找教练,然后完全没找着,淦) 79分,众所周知CCF ...
- 2017.9.23 C组比赛总结
今天又回到了C组,感觉爽歪歪~分数终于是个三位数了,yes! 第一题,赛车.水!只用一个贪心就可以AC了. first,以速度为关键字小到大qsort一下... scond,枚举每一个赛车,看看它可以 ...
- Mysql 表空间和 数据页空洞
一.表空间1.表空间: innodb 引擎存储的最高层: 存放所有的数据2.独立表空间:Mysql 版本 5.6 后默认开启的单表单空间(1)Innodb 默认存储引擎页的大小为 16K :默认表空间 ...
- PythonDay11
第十一章函数使用_迭代器 今日内容 函数名的第一类对象及使用 f-strings 迭代器 函数名的第一类对象及使用 函数名可以当做值,赋值给变量 函数名可以当做容器内的元素 函数名可以当做函数的参数 ...