题解:P11409 西湖有雅座

news/2024/12/18 21:57:44/文章来源:https://www.cnblogs.com/yingxilin/p/18615924

题解:P11409 西湖有雅座

题目转送带

简洁思路

由于数据比较小,可以先预处理出任何两个零件是否能出现在同一栋大楼上。即枚举所有的两个零件,根据题意去模拟判断条件是否满足:

\[\forall i,j \in U,f\left (i,j\right) \ge \lceil \frac{ \min \left ( S\left(i \right),S\left(j\right) \right) }{2} \rceil \]

若不符合则连一条边。然后便可以直接转化为二分图染色问题求解。

关于二分图染色的简洁说明

把二分图中不能处于同一集合的点连一条边,在该边两端染上不同颜色,即 0 和 1 。若出现矛盾则说明不能成立,直接返回。(这只是笔者自己的简洁理解,若要掌握二分图染色还是要自己去找博客系统学习)

code

#include<bits/stdc++.h>
using namespace std;
int n,h,w;
const int N=1005;
int a[1000+5][10][10];
int t[N];
vector<int>g[N];
int k[N];
int s[N];
int ans;
bool dfs(int u,int c){k[u]=c;s[c]++;for(auto v:g[u]){if(k[v]==k[u]) return false;if(k[v]==-1&&!dfs(v,1-c)) return false;}return true; 
}
int main(){cin>>n>>h>>w;for(int i=1;i<=n;i++){for(int j=1;j<=h;j++)for(int k=1;k<=w;k++){cin>>a[i][j][k];t[i]+=a[i][j][k];}}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){if(i==j) continue;int f=0;for(int x=1;x<=h;x++)for(int y=1;y<=w;y++){f+=a[i][x][y]&&a[j][x][y];}if(f<(min(t[i],t[j])+1)/2){g[i].push_back(j);g[j].push_back(i);}}memset(k,-1,sizeof k);for(int i=1;i<=n;i++){int p0=s[0];int p1=s[1];if(k[i]==-1&&!dfs(i,1)){cout<<-1<<endl;return 0;}ans+=max(s[0]-p0,s[1]-p1);}cout<<ans<<endl;return 0;
}

本题后记

本题为 2024 年 12 月的 [DHOI] Round 1 洛谷比赛中,数据实在过水。同机房的 QC dalao 直接写了个假贪心过了第二和第三个包(难以想象),而 FRZ dalao 则写出了第一个包,于是……
超级缝合怪。

水数据点AC_code

#ifndef ONLINE_JUDGE
#define FRZ_29
#endif#include <bits/stdc++.h>using namespace std;using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned;
//using i128 = __int128;const int N = 1005;#define PRINT(x) cout << #x << " = " << x << "\n"
#define LF(i, l, r) for (int i = (l); i <= (r); i++)
#define RF(i, r, l) for (int i = (r); i >= (l); r++)int n, h, w, s[N], f[N][N];
int m[N][10][10], ans;
vector<int> U;
bool vis[N];bool check() {LF(i, 0, U.size() - 1) {LF(j, i + 1, U.size() - 1) {if (f[U[i]][U[j]] < (min(s[U[i]], s[U[j]]) + 1) / 2) {return false;}}}LF(i, 1, n) {if (vis[i]) continue;LF(j, i + 1, n) {if (vis[j]) continue;if (f[i][j] < (min(s[i], s[j]) + 1) / 2) return false;}}return true;
}void dfs(int d) {if (d == n + 1) {if (check()) ans = max(ans, max((int)(n - U.size()), (int)(U.size())));return;}U.push_back(d);vis[d] = 1;dfs(d + 1);U.pop_back();vis[d] = 0;dfs(d + 1);
}
int a[1005][15][15];
int sum[1005];//f[1005][1005];
int num[1005][1005];
struct node
{int id,s;
}frz[1005];
bool cmp(node x,node y){return x.s<y.s;}
inline int read()
{int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(int)(c-'0');c=getchar();}return x*f;
}
inline void write(int x)
{if(x<0){putchar('-');x=-x;}if(x>9) write(x/10);putchar(x%10+'0');
}
inline void solve()
{   
//    cin>>n>>h>>w;for(int i=1;i<=n;i++)for(int j=1;j<=h;j++)for(int k=1;k<=w;k++) cin>>a[i][j][k],sum[i]+=a[i][j][k];for(int oi=1;oi<=n;oi++){for(int oj=1;oj<=n;oj++){if(oj==oi) continue;for(int i=1;i<=h;i++)for(int j=1;j<=w;j++) f[oi][oj]=f[oi][oj]+(a[oi][i][j]&a[oj][i][j]);}}for(int i=1;i<=n;i++){frz[i].id=i;for(int j=1;j<=n;j++){// if(i==j) continue;// cout<<f[i][j]<<" "<<((min(sum[i],sum[j])+1)/2)<<endl;if(f[i][j]<((min(sum[i],sum[j])+1)/2)){num[i][j]=1;}frz[i].s+=num[i][j];}}sort(frz+1,frz+n+1,cmp);for(int i=1;i<=n;i++){int kkk=frz[i].id;if(vis[kkk]==0){ans++;for(int j=1;j<=n;j++){if(num[kkk][j]==1){vis[j]=1;}}}}if(ans==1) cout<<-1<<endl;else cout<<ans<<endl;}int main() {
//#ifdef FRZ_29
//  freopen("code.in", "r", stdin);
//  freopen("code.out", "w", stdout);
//#endifios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n >> h >> w;if(n>20) {solve();return 0;} LF(i, 1, n) LF(j, 1, h) LF(k, 1, w) {cin >> m[i][j][k];s[i] += m[i][j][k];}LF(i, 1, n) LF(j, i + 1, n) LF(k, 1, h) LF(p, 1, w)f[i][j] += (m[i][k][p] & m[j][k][p]);dfs(1);cout << (ans == 0 ? -1 : ans);return 0;
}// START AT 2024 / 12 / 15 13 : 56 : 15

水完了。
yingxilin
Qian·JX のjoker
2024-12-18 于玉山一中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855041.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于.NET WinForm开发的一款硬件及协议通讯工具

前言 今天大姚给大家分享一款基于.NET WinForm开发的一款硬件及协议通讯工具:PLC-CommunTools。 项目介绍 PLC-CommunTools是一款基于.NET WinForm开发的一款硬件及协议通讯工具,包含各类厂商的PLC协议及基础的TCP、串口通讯、IO口通讯等协议通讯功能的实现整合,注意还有一部…

游戏过程

根据是否结束游戏的逻辑选择对掷骰子的过程用bool申明变量掷骰子 static bool RollDice (w,h,ref Player p1,ref Player p2,Map map) {InfoClear(h);Console.ForegroundColor=p1.type==E_PlayerType.Player?ConsoleColor.Cyan:ConsoleColor.Meganta;if(p1.isPause){p1.isPause…

6.Group组件

关于Group组件的简单介绍首先,Group组件本身并不是一个“布局”类的组件,它只是一个容器,没有提供调整内部组件展示位置的方法,也就是说,当我们将多个组件(比如button)放在group中时,他们(根据流式规则?)会全部挤在窗口的左上角,当然,如果我们没有设置组件的大小的话…

直播预告:OpenAI 开始拥抱 RTC!为什么 LLM+RTC 才是多模态 AI 的未来?丨RTE Dev Talk

如果您正在开发具备语音对话、视觉理解等多模态能力的 AI Agent,请加入我们的直播讨论!OpenAI 今日发布了 OpenAI Realtime API 的重大更新,其中包括价格下调、新增模型以及一项尤为重要的改进: WebRTC 支持 。结合此前 WebRTC 创建者加入 OpenAI 的消息,这清晰地表明 Ope…

实验6 模板类、文件I/O与异常处理

实验四 vector.hpp#pragma once#include<iostream>#include<stdexcept>using namespace std;template<typename T>class Vector {private:int size;T* ptr;public:Vector(int size, int value = 0) :size{ size } {if (size < 0) {throw length_error(&qu…

把半年前完全没思路的题解了的感觉真好

虽然处理了很多次索引思路,不过最后还是过了。第一眼就有解题思路,这种感觉真不错,要的就是这种打怪升级的正反馈。 附上解题代码 `# @lc app=leetcode.cn id=2266 lang=python3[2266] 统计打字方案数@lc code=start from collections import Counter from functools import…

【Windows安全】13种回调函数执行ShellCode

#windows #回调函数 回调机制 在我们使用回调函数执行Shellcode之前,我们首先需要去了解Windows回调机制,Windows回调机制就像你和你的助手一样,比如说每一个律师所中的每一个律师都有一个实习助手,律师需要助手在特定的情况下去处理一些特殊的任务,但这些任务并不是日常…

MaLoader:一款基于Tauri+Rust的免杀马生成工具

免责声明 本公众号“黑客之道HackerWay”提供的资源仅供学习,利⽤本公众号“黑客之道HackerWay”所提供的信息而造成的任何直接或者间接的后果及损失,均由使⽤者本⼈负责,本公众号“黑客之道HackerWay”及作者不为此承担任何责任,一旦造成后果请自行承担责任!简介 MaLoade…

Element Plus组件库el-select组件多选回显踩坑

前情公司有经常需要做一些后台管理页面,我们选择了Element Plus,它是基于 Vue 3,面向设计师和开发者的组件库,是Vue框架生态中比较火的UI组件库,组件库丰富易用,组件链接:一个 Vue 3 UI 框架 | Element Plus,项目中经常会用到el-select多选功能,组件自带的多选交互也是…

Transformers 框架 Pipeline 任务详解(四):问答(question-answering)

本文深入介绍了 Transformers 框架中的 question-answering 任务,涵盖任务简介、应用场景如智能助手和客户服务、任务配置与模型选择、实战代码示例,以及如何利用 Gradio 创建 WebUI 界面,使用户能通过浏览器实时获取问答结果。文章旨在帮助读者快速掌握使用 Transformers 构…

docker高级篇(大厂进阶):安装mysql主从复制

docker高级篇(大厂进阶):安装mysql主从复制@目录1.Docker复杂安装详说1.1安装mysql主从复制本人其他相关文章链接 1.Docker复杂安装详说 1.1安装mysql主从复制主从搭建步骤: 1)新建主服务器容器实例3307 2)进入/mydata/mysql-master/conf目录下新建my.cnf 3)修改完配置后…

Bugku-CTF getshell

前几天在打2024 长城杯 & 国赛时发现的一道类似题题目:<?php define(pfkzYUelxEGmVcdDNLTjXCSIgMBKOuHAFyRtaboqwJiQWvsZrPhn, __FILE__); $cPIHjUYxDZVBvOTsuiEClpMXAfSqrdegyFtbnGzRhWNJKwLmaokQ = urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%7…