uvalive 6600 - Spanning trees in a secure lock pattern

2023-11-29 05:33

本文主要是介绍uvalive 6600 - Spanning trees in a secure lock pattern,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:输入n,有n*n个点,每个点与周围的8个点联通,找一共有多少种生成树。然后题意给出了一个矩阵,通过求矩阵的去掉第一行第一列的行列式的值就可以得到最终结果,对于mp[i][j],i == j的时候表示i点有多少个邻点,i != j的时候如果两个点是相邻的那么mp[i][j] = -1, 否则为0.

我只能说这是一个极其恶心人的题目,题目给出的数据范围是n<=6,于是我们就信了…………好傻呀……,队友用高斯消元处理矩阵之后把对角线的数字乘起来得到了一组结果,我“机智”的发现了n=6的时候结果已经超过了double的精度范围,于是我们都没交,但是比赛完看别人的代码才发现,他们交的表都不一样但是都AC了,最后结论是后台数据只有n=2, 3, 4三种数据……ORZ……

AC代码:

#include <iostream>
#include <cstdio>
using namespace std;
int main() {int n, t;scanf("%d", &t);while(t--) {scanf("%d", &n);if(n == 2)printf("16\n");else if(n == 3)printf("17745\n");else if(n == 4)printf("1064918960\n");else printf("1111\n");}return 0;
}

下面是我自己写的暴力程序,把行列式按行拆分暴力求解,足够得到2到4的结果,仅此而已。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int mp[50][50];
int vis[50];
const double eps = 1e-10;
void getv(int n) {int r1, c1, r2, c2;memset(mp, 0, sizeof(mp));for(int i = 0; i < n * n; i++) {for(int j = i + 1; j < n * n; j++) {r1 = i / n;c1 = i % n;r2 = j / n;c2 = j % n;if(abs(r1 - r2) < 2 && abs(c1 - c2) < 2) {mp[i][i]++;mp[j][j]++;mp[j][i] = mp[i][j] = -1;}}}
//    for(int i = 0; i < n * n; i++) {
//        for(int j = 0; j < n * n; j++) {
//            printf("%3d ", mp[i][j]);
//        }
//        printf("\n");
//    }
}
int cul(int n, int d) {if(d == n - 2) {int r1, r2;for(r1 = 1; vis[r1]; r1++);for(r2 = r1 + 1; vis[r2]; r2++);return mp[r1][n - 2] * mp[r2][n - 1] - mp[r1][n - 1] * mp[r2][n - 2];}int ans = 0, f = -1;for(int i = 1; i < n; i++) {if(!vis[i]) {f = -f;if(!mp[d][i]) continue;vis[i] = 1;ans += f * mp[d][i] * cul(n, d + 1);vis[i] = 0;}}return ans;
}
int n;
int main() {while(~scanf("%d", &n)) {getv(n);memset(vis, 0, sizeof(vis));printf("%d\n", cul(n * n, 1));}return 0;
}



这篇关于uvalive 6600 - Spanning trees in a secure lock pattern的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/431649

相关文章

设计模式 -- 职责链模式(Chain of Responsibility Pattern)

1 问题引出 1.1 学校 OA 系统的采购审批项目 如果金额 小于等于 5000, 由教学主任审批 (0<=x<=5000)如果金额 小于等于 10000, 由院长审批 (5000<x<=10000)如果金额 小于等于 30000, 由副校长审批 (10000<x<=30000)如果金额 超过 30000 以上,有校长审批 ( 30000<x) 1.2 传统方式 传统方式是

【硬刚Java并发】JUC基础(六):Lock 同步锁

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Java并发部分补充。 显示锁 Lock 在 Java 5.0 之前,协调共享对象的访问时可以使用的机制只有 synchronized 和 volatile 。Java 5.0 后增加了一些新的机制,但并不是一种替代内置锁的方法,而是当内置锁不适用时,作为一种可选择的高级功能。 ReentrantLock 实

解决 The sandbox is not sync with the Podfile.lock问题

问题描述: github / sourcetree下载的Demo,很多时候使用到CocoaPods,有的时候因为依赖关系或者版本问题不能编译运行。出现例如The sandbox is not sync with the Podfile.lock问题时候,如下所示 diff: /../Podfile.lock: No such file or directory diff: Manifest.l

【PostgreSQL教程】PostgreSQL 高级篇之 LOCK(锁)

博主介绍:✌全网粉丝20W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可以先关注收藏起来,在工作中、生活上等遇到相关问题都可以给我

在 python3 中使用 multiprocessing,加上锁,却发现锁没用,怎么办?Lock 多进程 多线程 锁 LOCK lock

multiprocessing 是多进程库,而不同进程之间的全局变量是不共享的,所以,这也是为什么当你对 python3 全局变量加上锁的时候会失效。 正确处理方式如下: 使用 multiprocessing.Value 和 multiprocessing.Array 来共享数据,可以使进程池中的所有进程能够正确访问和修改共享数据。 代码如下 import multiprocessing#

java线程 yield,sleep,join,synchronized wait notify notifyAll,ReentrantLock lock condition, 生产者消费者

yield,sleep,join yield,join,sleep,join是Thread中的方法,不需要 在synchronized 代码块中调用,和synchronized 没关系,也不会释放锁。 Thread.sleep(100);Thread.yield();Thread t;t.join(); (1)yield()不一定保证让出cpu yield()只是使当前线程重新回

mysql Deadlock found when trying to get lock; try restarting transaction

一、现场情况 sql:insert into a ...... 数据库隔离级别:read-committed 表a有唯一索引 二、死锁发生的4个必要条件 1、互斥条件(Mutual Exclusion):资源独享 2、占有并等待条件(Hold and Wait):占有资源并等待其他资源 3、非抢占条件(No Preemption):占有的资源不可以被剥夺,只能主动释放 4、循环等待

【UVALive】6709 Mosaic 二维线段树

传送门:【UVALive】6709 Mosaic 题目大意: 每次选择矩阵中的一个点,求以他为中心,边长为D(D一定是奇数)的矩阵中的最小值min和最大值max,输出ans =(min+max)/ 2(向下取整)。然后将该点的值修改为ans。 题目分析: 赤果果的二维线段树单点修改、区间查询。 又一次学习了线段树,发现原来所有的更新操作全部放在二维中即可。 很不错,一定要经常看看,温

【UVALive】3887 Slim Span 枚举+最小生成树

传送门:【UVALive】3887 Slim Span 题目大意:给出一个n(2 <= n <= 100)个结点的无向图,找一棵苗条度(最大边减最小边的值)最小的生成树。图中不含自环或重边。 题目分析:枚举最小边求生成树即可。模板用用萌萌哒~ 代码如下: #include <cstdio>#include <cstring>#include <algorit

【UVALive】5713 Qin Shi Huang's National Road System 最小生成树

传送门:【UVALive】5713 Qin Shi Huang's National Road System 题目大意:秦朝有n个城市,需要修建一些道路使得任意两个城市之间都可以连通。道士徐福声称他可以用法术修路,不花钱,也不用劳动力,但只能修一条路,因此需要慎重选择用法术修哪一条路。秦始皇不仅希望其他道路的总长度B尽量短(这样可以节省劳动力),还希望法术连接的两个城市的人口之和A尽量大,因此下