洛谷 P2765 魔术球问题 (网络流 + 思维)

【机械臂视觉抓取从理论到实战】 首先声明一下,此项目是参考B站哈萨克斯坦UP的【机械臂视觉抓取从理论到实战】 此内容为他研究生生涯的阶段性成果展示和技术分享,所有数据和代码均开源。所以鹏鹏我特此来复现一下,我采用的硬件与之有所不同,UP主使用UR5,我实验室采用的是UR3,下面列出相关材料 UR3CB3.12:https://www.universal-robots.cn/cb3/ 【UR3系统升级到CB3.12附带URcap1.05】硬件支持代码支持 jacquard数据集:https://pan.baidu.com/s/1524HrV 阅读详情

题目链接

题意:

给你 n 根柱子,需要往上放小球,小球的编号从 1 开始(1,2,3 ...),要使得每两个相邻的球之和为平方数(4, 9, 16 ...),问最多可以放多少个小球。

题解:

从 1 开始,一个一个地加入小球,每个小球分为两个点,一个点由源点流向它,容量为 1 ,另一个点由它流向汇点,容量也为 1 。那么每次加入一个点,如果能够和之前加入的数构成平方数,则将这个数的第一个点连向新加入的点的第二个点。如果能够跑出来新的流,则说明不需要加柱子,否则需要加一个新的柱子。直到柱子加到 n + 1 为止,那么当前加入的球数减一即为答案。最后遍历一遍正向边然后遍历一遍所有加入的数输出路径即可。

代码:

#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <bitset>
using namespace std;

typedef long long ll;
#define int ll
#define INF 0x3f3f3f3f3f3f3f3f
#define MAXM 30000 + 10
#define MAXN 20000 + 10
const ll mod = 1e9 + 7;
#define P pair<int, int>
#define fir first
#define sec second

int n, m, k;
int dep[MAXN];
struct Edge{
    int next, to, dis;
}edge[MAXM<<1];
int cnt, head[MAXN];
queue<int> q;

void add(int from, int to, int dis)
{
    edge[++cnt].next = head[from];
    edge[cnt].to = to;
    edge[cnt].dis = dis;
    head[from] = cnt;
}

bool bfs(int s, int t)
{
    memset(dep,0x7f,sizeof(dep));
    while (!q.empty()) q.pop();
    dep[s] = 0;
    q.push(s);

    while (!q.empty()) {
        int now = q.front(); q.pop();
        for (int i = head[now]; i != -1; i = edge[i].next) {
            if (dep[edge[i].to] > INF && edge[i].dis) {
                dep[edge[i].to] = dep[now]+1;
                q.push(edge[i].to);
            }
        }
    }
    if (dep[t] < INF) return true;
    else return false;
}

int dfs(int now, int t, int limit)
{
    if (!limit || now == t) return limit;

    int flow = 0, f;
    for (int i = head[now]; i != -1; i = edge[i].next) {
        if (dep[edge[i].to] == dep[now] + 1 && (f = dfs(edge[i].to, t, min(limit, edge[i].dis)))) {
            flow += f;
            limit -= f;
            edge[i].dis -= f;
            edge[i^1].dis += f;
            if (!limit) break;
        }
    }
    return flow;
}

int Dinic(int s, int t)
{
    int maxflow = 0;
    while (bfs(s, t)) maxflow += dfs(s, t, INF);
    return maxflow;
}

void init()
{
    cnt = -1;
    memset(head, -1, sizeof(head));
}

bool judge(int x)
{
    int t = sqrt(x);
    if(t * t == x) return true;
    return false;
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    init();
    cin >> n;
    int now = 1, st = 0, ed = 20001, num = 1;
    add(st, 1, 1), add(1, st, 0);
    add(10001, ed, 1), add(ed, 10001, 0);
    while(now <= n) {
        num ++;
        add(st, num, 1), add(num, st, 0);
        add(10000 + num, ed, 1), add(ed, 10000 + num, 0);
        for(int i = 1; i < num; i ++) {
            if(judge(i + num)) {
                add(i, 10000 + num, 1), add(10000 + num, i, 0);
            }
        }
        int temp = Dinic(st, ed);
        if(temp == 0) now ++;
    }
    cout << num - 1 << endl;
    int nxt[MAXN] = {0};
    for(int i = 0; i < cnt; i += 2) {
        if(edge[i^1].to != st && edge[i].to != ed) {
            if(edge[i^1].dis) {
                nxt[edge[i^1].to] = edge[i].to - 10000;
            }
        }
    }

    bool vis[MAXN] = {false};
    for(int i = 1; i < num; i ++) {
        if(vis[i]) continue;
        int now = i;
        while(now) {
            cout << now << ' ';
            vis[now] = true;
            now = nxt[now];
        }
        cout << endl;
    }
}

/*

老实说,
要到几岁才开始不相信圣诞老人的存在……
这类无聊的话题对我而言,
根本不痛不痒的。
不过,
讲到我从几岁起开始不相信圣诞老人就是那个穿着红衣服的老公公时,
我能确定地说,
我根本打从一开始就不相信。
我知道幼稚园圣诞节庆祝会时出现的圣诞老人是假的,
回溯记忆,
还能记起周围的幼稚园小朋友都一脸不信任地望着假扮圣诞老人的园长老师。
即使没有撞见老妈正在亲吻圣诞老公公,
机灵的我也老早就怀疑只在圣诞节工作的老爷爷是否真的存在了。
不过,
我却是过了很久以后,
才发现外星人、幽灵、妖怪、超能力者以及特摄、动画里头,
那些与邪恶组织战斗的英雄们并不存在这世上。
不,
说不定我早就发现了,
只不过一直不想承认而已。
因为,
在我的内心深处,
是十分渴望那些外星人、幽灵、妖怪、超能力者以及邪恶组织突然出现在眼前的。
和我生活的这个普通世界相比,
特摄、动画里头所描绘的世界,
反而更有魅力。
我也想活在那种世界里!
我真的好想拯救被外星人绑架并关在透明的大型豌豆夹里头的少女…
也想拿着雷射枪运用智慧与勇气击退企图改写历史的未来人…
或者光用一句咒语就收拾了恶灵跟妖怪,
再不然就是和秘密组织的超能力者进行超能力的战斗!
等等,
冷静一下,
假设我被外星人、幽灵、妖怪、超能力者那类的生物袭击,
没有任何特殊能力的我怎么可能和他们对抗?
于是,
我便如是幻想 ——
某天,
班上突然转来一个谜样的转学生,
他其实是个外星人或未来人那类的生物,
并拥有未知的能力,
后来他跟坏人战斗,
而我只要设法让自己被卷进那场战争就好了。
主要战斗的人是他,
而我则是追随他的小跟班。
啊啊,
实在太棒了,
我真是聪明啊!
要不然就是这样。
某天,
我那不可思议的力量突然觉醒,
就像隔空取物或精神念力之类的。
而且地球上其实还有很多拥有超能力的人类存在,
自然也会有一个组织专门收容这些人。
不久之后,
善良的组织便派人来迎接我。
而我也成为组织的一员共同对抗企图征服世界的邪恶超能力者。
不过,
现实却是意外地残酷。
现实的生活中,
并没有半个转学生转来我班上,
我也没看过UFO…
就算去了地方上常出现幽灵或妖怪的灵异地点也连个鬼影都没有…
花了两小时盯着桌上的铅笔,
它却连一微米都没移动…
上课时死盯着前座同学的头,
却怎么样也无法读出他在想什么。
我就这样边惊叹世界物理法则经常出现的现象,
边不停自嘲,
不知从何时起,
我就开始不看电视上的UFO特别节目或灵异节目了。
因为不可能会有那种东西……
不过后来我也成长到仅对那方面的事情存有一丝留恋的程度。
国中毕业之后,
我便从那孩提时代的梦想毕业,
逐渐习惯这个世界的平凡。
而让我还有一缕期待的一九九九年也没有发生什么事。
进入二十一世纪后,
人类依旧无法迈出月球到其他星球去。
看这情况,
在我还活着的时候,
想从地球当天往返阿尔法人马座似乎是不太可能的。
我脑海中时而幻想着这些事,
终于也没啥感慨地成为高中生 —— 直到遇到了凉宫春日。
之后,
我就这么糊里糊涂地进入学区内的县立高中就读。
起初我还很后悔,
因为这座学校位于很高的山上,
就算是春天也要挥汗如雨地爬上直窜山顶的坡道,
想轻松健行的那份悠闲早已消失无踪。
一想到今后三年每天一大早都得这样爬山,
我的心情就阴郁无比。
或许是早上差点睡过头的关系,
走路的速度自然加快许多,
虽然也曾想过以后干脆早十分钟起床,
慢慢走去上学就不会这么累,
不过一想到临起床前的那十分钟睡眠是多么的宝贵,
我随即放弃了这个念头。
所以,
我相信未来的三年还是得持续这个晨间的运动。
一想到这里,
心情就更沉重了。

*/

 

【Tessy】集成测试小白入门指导 本文详细介绍了如何进行集成测试的小白入门指导,从新建工程到设计用例,实现集成测试的过程详细步骤 阅读详情

相关推荐

量化交易新手入门:从零开始搭建你的第一个Python交易策略(附完整代码)

本文为量化交易新手提供从零开始搭建Python双均线策略的完整指南,涵盖环境配置、数据获取、策略实现及风险管理等关键步骤。通过详细的代码示例和实践建议,帮助读者快速掌握量化交易的核心技术,并避免常见陷阱。文章特别强调Python在量化交易中的技术革新优势,适合希望进入金融科技领域的初学者。

weixin_26905487的博客 443

【Java】A乘积—方法:BigInteger—(OJ:牛客-练习赛54)

链接:https://ac.nowcoder.com/acm/contest/1842/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 记 ,即二进制表示下后i位为1,其余位为0的数。给定一个正整数n,求。 输出答案对998244353取模后的结果。T组数据。 输入描...

weixin_43785855的博客 587

TOPCon vs PERC:2024年光伏电站投资,哪种技术更划算?

本文深入分析了2024年光伏电站投资中TOPCon与PERC技术的财务表现。通过对比初始系统成本、全生命周期发电量及环境适应性,指出当前TOPCon组件与PERC价差已显著缩小,其更高的转换效率和更低的衰减率能有效降低度电成本并提升项目内部收益率,为投资者提供更具长期价值的方案。

p5l2m9n4o6q的博客 267

Squares (AtCoder Regular Contest 125)(枚举+思维)

传送门 题意 给你一个正整数N,找出有多少个整数对(x,y),满足如下条件,答案对998244353取模 1 <= N <= 1012 1<= x,y <=N. x*x-y是一个完全平方数.(此处0也是完全平方数) 思路 x2 - y = z2 x2 - z2 = y (x - z)(x + z) = y 设 l = x - z, r = x + z 由题意知z >= 0, 又由上式可知, 1 <= l <= sqrt(n),l <= r <=

QQ2530063577的博客 435

科研党必看!Zotero+Claude3插件实战:如何用AI高效阅读文献(附详细配置步骤)

本文详细介绍了如何通过Zotero与Claude3插件的深度整合,实现科研文献的高效阅读与管理。从环境配置到核心功能实战,包括智能摘要生成、精准学术翻译和论文写作辅助等,帮助科研人员大幅提升工作效率。特别适合需要处理大量文献的研究者使用。

o0p1q2r3的博客 432

Win10+pycharm+conda 配置Siammask 过程记录(新手向)

我们跑动demo 需要配置两个相关的文件这两个文件需要用 git 进行下载,对于不熟悉git的小伙伴 我这里给出连接,大家可以直接下载即可,并将其配置在 experiments文件夹下然后大家再需要在设置参数参数这里给出了。

C1137577723的博客 551

【Python】取火柴小游戏(巴什博弈)

当我们想要玩一个简单而有趣的游戏,同时又想锻炼自己的编程技能时,一个经典的选择就是火柴游戏。这个游戏的规则很简单:有一堆火柴,每次可以拿走1到6根,两名玩家轮流取火柴,拿到最后一根的玩家获胜。在本篇博客中,我们将使用Python来模拟和玩这个火柴游戏。

cout0 1509

BIOS硬件监控实战:如何手动读取IT8738芯片的温度与风扇数据(附代码)

本文深入探讨了如何绕过操作系统和HWMonitor等监控软件,直接通过寄存器级操作读取IT8738超级I/O芯片的硬件监控数据。文章提供了从动态定位EC空间、构建底层读写函数到解码传感器寄存器映射的完整实战指南,并附有C语言代码示例,帮助开发者理解BIOS硬件监控的底层原理,适用于定制硬件开发与故障诊断。

weixin_29192211的博客 109

2024 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第六届CCPC河南省大学生程序设计竞赛

对于小A而言,数位包含1∼9,并且至少两个数位是d(1≤d≤9)的.十.进.制 .正 .整 .数都是幸运数。当d=3时,显然1234567890123 是小 A 的幸运数,但987654321 因为数位 3 仅出现了一次而不是幸运数,998244353 因为缺少数位 1,6,7 而不是幸运数。现在小A有一个正整数n,并给出正整数d。他想找到正整数k使得二者的乘积n·k是幸运数。你能用计算机辅助他的计算吗?

2302_80423900的博客 2864

特别章节-0.1 SolidWorks导出机械臂的URDF模型各个关节坐标系设置

通过Solidworks导出机械臂的URDF模型文件,建立机械臂的各个关节坐标系的规则以及注意点,详细步骤

六眼飞鱼的博客 1万+

华为OD技术面真题 - 数据库Redis - 1

汇总华为OD技术面真题Redis方面高频真题,提供详细解答。

qq_45776114的博客 934

单点修改&区间求和

题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某一个数加上xx 求出某区间每一个数的和 输入格式 第一行包含两个正整数n,mn,m,分别表示该数列数字的个数和操作的总个数。 第二行包含nn个用空格分隔的整数,其中第ii个数字表示数列第ii项的初始值。 接下来mm行每行包含33个整数,表示一个操作,具体如下: 1 x k含义:将...

AlanJobs的博客 873

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

蓝魔法师

链接:https://www.nowcoder.com/acm/contest/215/C 来源:牛客网   题目描述 “你,你认错人了。我真的,真的不是食人魔。”--蓝魔法师   给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于等于k,两种方案不同当且仅当存在一条边在一个方案中被删除,而在另一个方案中未被删除,答案对998244353取模 输入描述: 第一行两个整数n...

海绵的博客 477

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

斐波那契数列 矩阵快速幂

斐波那契

weixin_43578474的博客 2238

PTA 2 斐波那契数列(II)

已知斐波那契数列Fn​=Fn−1​+Fn−2​(n>=3),F1​=1,F2​=1 求解该数列的第n项,结果对998244353取模。 输入格式: 输入一个正整数n(1<=n<=10000000)。 输出格式: 输出一个数,数列的第n项 输入样例1: 1 结尾无空行 输出样例1: 1 结尾无空行 输入样例2: 3 结尾无空行 输出样例2: 2 结尾无空行 #include<stdio.h> #define N_max 99824..

我的博客 1452

【洛谷】P1247 取火柴游戏(nim博弈+推论)

题目描述 输入kk及kk个整数n_1n1​,n_2n2​,…,n_knk​,表示有kk堆火柴棒,第ii堆火柴棒的根数为n_ini​;接着便是你和计算机取火柴棒的对弈游戏。取的规则如下:每次可以从一堆中取走若干根火柴,也可以一堆全部取走,但不允许跨堆取,也不允许不取。 谁取走最后一根火柴为胜利者。 例如:kk=22,n_1n1​=n_2n2​=22,AA代表你,PP代表计算机,若决定AA先取: AA:(2,2)(2,2)→(1,2)(1,2){从一堆中取一...

_C9的博客 862

P1247 取火柴游戏

题目描述 输入k及k个整数n1,n2,…,nk,表示有k堆火柴棒,第i堆火柴棒的根数为ni;接着便是你和计算机取火柴棒的对弈游戏。取的规则如下:每次可以从一堆中取走若干根火柴,也可以一堆全部取走,但不允许跨堆取,也不允许不取。 谁取走最后一根火柴为胜利者。 例如:k=2,n1=n2=2,A代表你,P代表计算机,若决定A先取: A:(2,2)→(1,2) {从一堆中取一根}

ztz11的博客 717

洛谷 P1247 取火柴游戏 题解

题目大意:太简单了相信大家都看得懂,那就不讲了吧其实这题是Nim游戏这个博弈论模型的裸题,你只要知道Nim游戏是什么,这题根本不难做,比较难处理的就是输出先手必赢时第一步应该怎么走,因为Nim游戏的结论是当a1^a2^……^an=0时,后手必赢,那这种先手必赢的情况,一定只需要在某一堆取完之后使得a1^a2^……^an=0即可,那这怎么求呢,那我们可以像后手必赢局势时后手的走法一样就可以了(你问我...

a_forever_dream的博客 493

(博弈/nim)取火柴游戏

给出n堆火柴,两人轮流取,标准nim博弈 要求输出先手必胜时第一次操作的火柴数目及位置后操作后的火柴数目 #include &amp;lt;bits/stdc++.h&amp;gt; using namespace std; typedef long long ll; const int maxn = 500000 + 10; int a[maxn]; int main() { int n; s...

weixin_40588429的博客 899

取火柴游戏||Nim博弈

好久之前看的sg函数了 好像就记住一个nim博弈qwq 第一次啊看的时候很迷,现在感觉可以了qwq 首先我们来看一个其他的游戏。(以下游戏只有两个人参与,且足够聪明) 两个人在一张圆形的桌子上放等大的盘子,最后一个无法放盘子的人输掉比赛 很显然,先手必胜。 为什么? 第一个人可以将盘子放在桌子的中心。 然后只要第二个人可以放置盘子,我们就在其中心对称的位置上放盘子。 如此,只要后手可以放,我先手...

weixin_34205076的博客 350

取火柴-博弈论

取火柴 (10分)C时间限制:3000 毫秒 | C内存限制:3000 Kb题目内容: 有n个火柴棍,两个游戏玩家a和b轮流取,规则是第一次取的人最少取1根,最多取n-1根,随后每人最多只能取对方上一次取的数目 的2倍,最少取1根。谁取到最后一根为胜者。试问先取的人是赢还是输。 输入描述n输出描述1表示胜,0表示输输入样例3输出样例0 解析:回溯。 转载于:https://www.cnbl...

weixin_30378623的博客 457

【尼姆博弈】洛谷P1247

**题目链接:**https://www.luogu.org/problem/P1247 #include<iostream> #include<cstdio> #include<string> #include<string.h> #include<cstring> #include<algorithm> #include&...

寻找秀儿的博客 233

博弈知识汇总 && 取火柴游戏

博弈知识汇总 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。 (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最...

weixin_33878457的博客 339

P1247 取火柴游戏 博弈论

题目 输入k及k个整数n1,n2,…,nk,表示有k堆火柴棒,第i堆火柴棒的根数为ni;接着便是你和计算机取火柴棒的对弈游戏。取的规则如下:每次可以从一堆中取走若干根火柴,也可以一堆全部取走,但不允许跨堆取,也不允许不取。 谁取走最后一根火柴为胜利者。 例如:k=2,n1=n2=2,A代表你,P代表计算机,若决定A先取: A:(2,2)→(1,2) {从一堆中取一根} P:(1,2...

117瓶果粒橙 839

【博弈论Nim】P1247 取火柴游戏

思路:在该题中,如果游戏一开始处于平衡态,那么先取必败,输出lose; 如果游戏一开始处于非平衡态,那么先取必胜,剩下就是考虑怎么取了 就第一个样例而言,3^6^9的结果是12,12^3=15(3不能变到15),12^6=10(6不能变到10),12^9=5(9-4=5) 这是从样例中猜出来的判别方法 仔细一想确实这个样子,12^9是除了第3堆所有堆火柴的异或和,记为y,设新第...

iroy33的博客 754
上一篇: 南昌网络赛 Max answer(单调栈 + 线段树维护前缀和最大最小值)
下一篇: POJ-1149 PIGS (网络流巧妙建图)
ttoobne
博客等级 码龄9年 13粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值