POJ 3185 The Water Bowls 【一维开关问题 高斯消元】

POJ---3185:The Water Bowls【高斯消元】 题意: 一排有20个碗,给出每个碗的状态,改变一个碗的状态,其左右两边的碗的状态也随之改变(0 -> 1,1 -> 0),求全部碗的状态为0时的最少操作数 分析: (1)每个碗的状态只有0或1(所以mod 2),设第i个碗旋转了 xi 次,得到以下方程: 说明:如果转动第j个碗影响第i个碗,aij = 1,否则aij = 0;vi 为第 i 碗的初末状态的异... 阅读详情

任意门:http://poj.org/problem?id=3185

The Water Bowls
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 7676 Accepted: 3036

Description

The cows have a line of 20 water bowls from which they drink. The bowls can be either right-side-up (properly oriented to serve refreshing cool water) or upside-down (a position which holds no water). They want all 20 water bowls to be right-side-up and thus use their wide snouts to flip bowls. 

Their snouts, though, are so wide that they flip not only one bowl but also the bowls on either side of that bowl (a total of three or -- in the case of either end bowl -- two bowls). 

Given the initial state of the bowls (1=undrinkable, 0=drinkable -- it even looks like a bowl), what is the minimum number of bowl flips necessary to turn all the bowls right-side-up?

Input

Line 1: A single line with 20 space-separated integers

Output

Line 1: The minimum number of bowl flips necessary to flip all the bowls right-side-up (i.e., to 0). For the inputs given, it will always be possible to find some combination of flips that will manipulate the bowls to 20 0's.

Sample Input

0 0 1 1 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0

Sample Output

3

Hint

Explanation of the sample: 

Flip bowls 4, 9, and 11 to make them all drinkable: 
0 0 1 1 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 [initial state] 
0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 [after flipping bowl 4] 
0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 [after flipping bowl 9] 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [after flipping bowl 11]

Source

 

 

题意概括:

N个开关,打开一个开关相邻的开关状态会取反,给一个初始的所有开关状态,要求求出最小的改变开关的次数使得所有开关的状态为关闭;

解题思路:

构造增广矩阵类似于根据开关的关系构造有向图的邻接矩阵;

构造增广矩阵,高斯消元,枚举自由元(二进制枚举状态),寻找最小值;

 

AC code:

  1 #include <cstdio>
  2 #include <iostream>
  3 #include <algorithm>
  4 #include <cstring>
  5 #include <cmath>
  6 #define INF 0x3f3f3f3f
  7 #define LL long long
  8 using namespace std;
  9 const int MAXN = 300;
 10 int a[MAXN][MAXN];  //增广矩阵
 11 int freeX[MAXN];    //自由元
 12 int x[MAXN];       //解集
 13 int equ, var;
 14 int free_num;
 15 int N;
 16 
 17 int Gauss()
 18 {
 19     int maxRow, col, k;
 20     free_num = 0;
 21     for(k = 0, col = 0; k < equ && col < var; k++, col++){
 22         maxRow = k;
 23         for(int i = k+1; i < equ; i++){
 24             if(abs(a[i][col]) > abs(a[maxRow][col])){
 25                 maxRow = i;
 26             }
 27         }
 28 
 29         if(a[maxRow][col] == 0){
 30             k--;
 31             freeX[free_num++] = col;
 32             continue;
 33         }
 34         if(maxRow != k){
 35             for(int j = col; j < var+1; j++){
 36                 swap(a[k][j], a[maxRow][j]);
 37             }
 38         }
 39 
 40         for(int i = k+1; i < equ; i++){
 41             if(a[i][col] != 0){
 42                 for(int j = col; j < var+1; j++)
 43                     a[i][j] ^= a[k][j];
 44 
 45             }
 46         }
 47     }
 48 
 49     for(int i = k; i < equ; i++)        //无解
 50         if(a[i][col] != 0)  return -1;
 51 
 52     if(k < var) return var-k;           //多解返回自由元个数
 53 
 54     for(int i = var-1; i >= 0; i--){    //唯一解,回代
 55         x[i] = a[i][var];
 56         for(int j = i+1; j < var; j++){
 57             x[i] ^= (a[i][j] && x[j]);
 58         }
 59     }
 60     return 0;
 61 }
 62 
 63 
 64 void solve()
 65 {
 66     int t = Gauss();
 67     if(t == -1){            //无解的情况,其实题目保证有解
 68         printf("inf\n");
 69         return;
 70     }
 71     else if(t == 0){                //唯一解
 72         int ans = 0;
 73         for(int i = 0; i < N; i++){
 74             ans += x[i];
 75         }
 76         printf("%d\n", ans);
 77         return;
 78     }
 79     else{                              //多解,枚举自由元
 80         int ans = INF;
 81         int tot = (1<<t);
 82         for(int i = 0; i < tot; i++){
 83             int cnt = 0;
 84             for(int j = 0; j < t; j++){
 85                 if(i&(1<<j)){
 86                     x[freeX[j]] = 1;
 87                     cnt++;
 88                 }
 89                 else x[freeX[j]] = 0;
 90             }
 91 
 92             for(int j = var-t-1; j >= 0; j--){
 93                 int index;
 94                 for(index = j; index < var; index++)
 95                     if(a[j][index])
 96                         break;
 97                 x[index] = a[j][var];
 98 
 99                 for(int s = index+1; s < var; s++)
100                     if(a[j][s])
101                         x[index] ^= x[s];
102                 cnt += x[index];
103             }
104             ans = min(ans, cnt);
105         }
106         printf("%d\n", ans);
107     }
108     return;
109 }
110 
111 int main()
112 {
113     N = 20;
114     equ = 20;
115     var = 20;
116     memset(a, 0, sizeof(a));
117     memset(x, 0, sizeof(x));
118     for(int i = 0; i < N; i++){
119         a[i][i] = 1;
120         if(i > 0) a[i-1][i] = 1;
121         if(i < N-1) a[i+1][i] = 1;
122     }
123     for(int i = 0; i < N; i++){
124         scanf("%d", &a[i][N]);
125     }
126     solve();
127     return 0;
128 }
View Code

 

Glue)《Multi-omics single-cell data integration and regulatory inference with graph-linked embedding》 论文引入GLUE框架,通过知识引导图(guidance graph)显式建模跨层调控交互,桥接特征空间,实现准确、鲁棒、可扩展的整合。近年来,单细胞测序技术(如scATAC-seq用于染色质可及性、snmC-seq用于DNA甲基化、scRNA-seq用于转录组)允许同时探测多个组学层,揭示细胞异质性和调控机制。GLUE优于现有方法:桥接特征空间,避免信息丢失,支持多组学和调控推断。用于整合未配对的单细胞多组学数据(如scRNA-seq、scATAC-seq和snmC-seq),并同时进行调控交互推断。 阅读详情

相关推荐

A-Level CS 计算机科学 考试知识点——考试介绍&第1章

前言:该系列文章是本人在给学生辅导本课程的过程中结合英文教材所总结的,该系列共分为30章,主要介绍了考试的核心知识点。若需要A-Level CS 计算机科学考试辅导也可以私信我。 目录 关于A-Level CS 计算机科学考试 考试简介 考试内容 考试时间 评分情况 第1章 信息表示 本章学习内容 1.01 数字系统 1.02 数字的内部编码 整数编码(Coding for integers) 二进制编码的十进制(Binary coded decimal——BCD) 1.03.

王俊的博客 6458

POJ 3185 The Water Bowls 【一维开关问题 高斯消元+枚举自由元求最小值】

The Water Bowls Time Limit:1000MS Memory Limit:65536K Total Submissions:7862 Accepted:3096 Description The cows have a line of 20 water bowls from which they drink. The bowls...

pxlsdz的博客 570

可视化工具--Plotly

随着信息技术的发展和硬件设备成本的降低,当今的互联网存在海量的数据,要想快速从这些数据中获取更多有效的信息,数据可视化是重要的一环。对于Python语言来说,比较传统的数据可视化模块是Matplotlib,但它存在不够美观、静态性、不易分享等缺点,限制了Python在数据可视化方面的发展。   为了解决这个问题,新型的动态可视化开源模块Plotly应运而生。由于Plotly具有动态、美观、易用、种类丰富等特性,所以一经问世就受到开发人员的喜爱。

YFater的博客 1万+

POJ 3185 The Water Bowls 高斯消元+枚举变元

转载请注明出处,谢谢 http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents           by---cxlove 一如既往,继续高斯,这题和之前的略有不同,需要考虑多组解的情况。 当出现自由变元时,枚举所有解,取最优解。开始尝试用位运算,后来果断搜索吧。 不过这题貌似有问题,详见 http://blog.youkuaiyun.com/acm_c

窝不是爱酱,喵~~~~ 2341

用UltraISO制作镜像以RAW格式刻录系统到U盘后,在Windows上无法识别的解决办法

在这篇文章中,用UltraISO制作镜像后,会使得U盘无法识别!!!那么,如何抹掉U盘的数据,格式化U盘呢?

拥抱具身智能,昇腾Ascend C 2732

在Android中实现SIM卡的读写操作

在上述代码中,我们创建了一个PhoneStateListener的实例,并重写了onSimStateChanged方法来处理SIM卡状态改变的事件。然后,我们通过调用telephonyManager的listen方法注册了这个监听器,并指定了要监听的事件类型为SIM卡状态的改变。在上述代码中,我们调用telephonyManager的sendUssdRequest方法来发送USSD命令,并通过TelephonyManager.UssdResponseCallback来处理USSD响应和发送失败的情况。

2301_79326510的博客 927

POJ3185 The Water Bowls 高斯消元+枚举

题目链接:http://poj.org/problem?id=3185 题目大意:有20个碗,排成一排,0表示可以饮用,1表示不能饮用,每翻转一个碗,他左右的碗都会被翻转,现在要给出这些碗的初始状态,问至少需要经过多少次翻转,才能使所有的碗口都能饮用。(保证一定有解)。 分析:高斯消元,对于不唯一的解,分别枚举计算,找出最小值。 实现代码如下: #include

AC_Gibson的专栏 623

Jetson Orin 上拉取 GMSL 相机流并保存在 DMA 内存中

本文介绍了在NVIDIA Jetson Orin平台上实现GMSL相机DMA内存共享的低延迟采集方案。通过V4L2+NvBufSurface技术,将相机数据直接存入DMA缓冲区,避免传统流程中的CPU拷贝开销。文章详细说明了设备初始化、DMA缓冲区分配、V4L2绑定等关键步骤,并展示了调用示例。该方案支持零拷贝访问,适用于AI推理、硬件编码等场景,能显著提升车载视觉系统的实时性能,为多路GMSL相机接入和低延迟处理提供了高效解决方案。

J。 696

POJ 3185 The Water Bowls(高斯消元-枚举变元个数)

题目链接:http://poj.org/problem?id=3185 题意:20盏灯排成一排。操作第i盏灯的时候,i-1和i+1盏灯的状态均会改变。给定初始状态,问最少操作多少盏灯使得所有灯的状态最后均为0. 思路:高斯消元,记录变元个数,枚举变元。   int a[N][N],ans[N]; vector&lt;int&gt; b; int Gauss() { ...

weixin_34413802的博客 189

QT里获取UUID当做唯一文件名称

QT里获取UUID当做唯一文件名称

547

详解大端模式和小端模式

详解大端模式和小端模式 一、大端模式和小端模式的起源         关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令

ce123的技术博客 19万+

POJ 3185 The Water Bowls

高斯消元+枚举自由变元 The Water Bowls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4276   Accepted: 1678 Description The cows have a line of 20 wat

码代码的猿猿 1219

GB28181 —— 3、C++编写GB28181设备端,完成注册、注销、保活心跳、响应查询目录等功能(附源码)

GB28181 —— Win10下编写GB28181设备端,完成注册、注销、保活心跳、响应查询目录等功能(附源码)

1310

poj -- 3185 The Water Bowls(高斯消元)

有一个长度为20的01序列,要将其翻cheng全0

further~ 851

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

The Water Bowls(POJ-3185)

Problem Description The cows have a line of 20 water bowls from which they drink. The bowls can be either right-side-up (properly oriented to serve refreshing cool water) or upside-down (a position ...

Alex_McAvoy的博客 514

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

POJ 3185 The Water Bowls(高斯消元法,枚举自由变元)

题目: The Water Bowls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5013   Accepted: 1960 Description The cows have a line of 20 water bowls from which th

hexiecs的技术专栏 1261

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

poj3185 The Water Bowls 高斯消元

Language: Default The Water Bowls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4261   Accepted: 1671 Description The cows have a line of 20 water bowl

AC_kereo的专栏 706

poj 3185 The Water Bowls(数学:高斯消元)

每个位置只影响相邻文职

小华在努力~ 505

PKU 3185 The Water Bowls

题目:http://poj.org/problem?id=3185 题意:有20只碗排成一排, 奶牛翻转其中的一只碗, 其左右的碗都会跟着翻转,现在给出20只晚的初始状态,问需要至少多少次的翻转才能使所有碗都朝上。 思路:高斯消元+枚举自由变元。很容易想到如何建立方程组,一共有20个变元和20个方程组,如果有多个自由变元,需要枚举自由变元算出翻转次数,然后取最小值~~~ #include

AC_coder的专栏 626

The Water Bowls POJ - 3185(开关问题+暴力)

题意: 题目: The cows have a line of 20 water bowls from which they drink. The bowls can be either right-side-up (properly oriented to serve refreshing cool water) or upside-down (a position which holds no water). They want all 20 water bowls to be right-side-u

zeng_jun_yv的博客 219

[Gauss]POJ3185 The Water Bowls

题意:反正就是要给的一串01的变成全0 能影响自己和左右 最少需要几步 01方程组 异或解 1 int a[300][300]; // 增广矩阵 2 int x[300]; // 解 3 int free_x[300]; // 标记是否为自由未知量 4 5 int n; 6 void debug() 7 { 8 ...

aicheng4794的博客 149

POJ 3185 The Water Bowls(高斯消元法,输出0最多的解)

The Water Bowls Time Limit:1000MS Memory Limit:65536K Total Submissions:7860 Accepted:3094 Description The cows have a line of 20 water bowls from which they drink. The bowls...

LSD20164388的博客 316

A - The Water Bowls POJ - 3185 (bfs||高斯消元)

题目链接:https://vjudge.net/contest/276374#problem/A 题目大意:给你20个杯子,每一次操作,假设当前是对第i个位置进行操作,那么第i个位置,第i+1个位置,第i-1个位置的盘子都会翻转,第一个和最后一个例外(只有两个)。然后问你最少的操作数能够使得盘子全部变成反着的(0代表反,1代表正)。 bfs的做法: 具体思路:bfs,注意起点为0个...

diaomeijiao3430的博客 163

poj 3185 The Water Bowls 高斯消元

经典开关问题,不过这回给出的是一行开关而不是矩阵开关。高斯消元枚举自由变元 #include #include #include using namespace std; int n = 20; int a[22][22] , x[22], freex[22],xx[22]; void debug() { puts("debug"); int i,j; for(i = 0;i

JayYe的专栏 944

POJ 3185 The Water Bowls(高斯消元,枚举变元)

很明了的开关问题,但是会有多种解的情况所以要枚举一下变元,求的一个最优的结果。和上一篇的思路与过程都很形似。 PS:第三百篇博客,得继续努力。 The Water Bowls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4302   Accepted: 1696

I am a slow walker, but I never walk backwards! 1498

POJ 3185 The Water Bowls (高斯消元)

传送门The Water BowlsTime Limit: 1000MSMemory Limit: 65536KTotal Submissions: 5946Accepted: 2346DescriptionThe cows have a line of 20 water bowls from which they drink. The bowls can be either right-side-

代码改变世界 957
上一篇: POJ 1681 Painter's Problem 【高斯消元 二进制枚举】
下一篇: POJ Widget Factory 【求解模线性方程】
莜莫oO
博客等级 码龄9年 7粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值