解题:SCOI 2008 天平
我们很容易想到差分约束,但是我们建出来图之后好像并不好下手,因为我们只能得到砝码间的大小关系,并不能容易地得到每个砝码的具体重量。
于是我们有了一种神奇的思路:既然得不到具体重量我们就不求具体重量了,只求出砝码间的关系即可,因为砝码只有三种还是可以讨论的。具体来说我们用$maxx[i][j]$表示$i-j$的最大值,$mini[i][j]$表示$i-j$的最小值,然后跑Floyd得出砝码间的关系,最后直接$n^2$枚举砝码检查即可
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=;
int maxx[N][N],mini[N][N];
int n,a,b,cnt,ans1,ans2,ans3;
char rd[N];
int main()
{
scanf("%d%d%d",&n,&a,&b);
for(int i=;i<=n;i++)
{
scanf("%s",rd+);
for(int j=;j<=n;j++)
if(rd[j]=='+') maxx[i][j]=,mini[i][j]=;
else if(rd[j]=='-') maxx[i][j]=-,mini[i][j]=-;
else if(rd[j]=='='||i==j) maxx[i][j]=mini[i][j]=;
else maxx[i][j]=,mini[i][j]=-;
}
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j&&i!=k&&j!=k)
{
maxx[i][j]=min(maxx[i][j],maxx[i][k]+maxx[k][j]);
mini[i][j]=max(mini[i][j],mini[i][k]+mini[k][j]);
}
for(int i=;i<=n;i++)
if(i!=a&&i!=b)
for(int j=i+;j<=n;j++)
if(j!=a&&j!=b)
{
ans1+=(mini[a][i]>maxx[j][b]||mini[a][j]>maxx[i][b]);
ans3+=(maxx[a][i]<mini[j][b]||maxx[a][j]<mini[i][b]);
ans2+=(maxx[a][i]==mini[a][i]&&maxx[j][b]==mini[j][b]&&maxx[a][i]==mini[j][b])||
(maxx[a][j]==mini[a][j]&&maxx[i][b]==mini[i][b]&&maxx[a][j]==mini[i][b]);
}
printf("%d %d %d",ans1,ans2,ans3);
return ;
}
解题:SCOI 2008 天平的更多相关文章
- 解题:SCOI 2008 配对
题面 如果没有两个数不能相同这个限制就两个数组排序后贪心即可.现在加上这个限制,注意到每个数组中的数是两两不同的,所以每次一定能在前面或后面一个数中找一个换过来,这样每次考虑相邻三个数转移就可以了,注 ...
- scoi 2008 && bzoj 1076 奖励关
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3223 思路:15?好,状压,OK. 这是转移方程 if((s[k]&j)==s[k] ...
- [BZOJ 1079][SCOI 2008]着色方案
1079: [SCOI2008]着色方案 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2237 Solved: 1361[Submit][Stat ...
- 【SCOI 2008】奖励关
Problem Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关. 在这个奖励关里,系统将依次随机抛出 \(k\) 次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之 ...
- 解题:SCOI 2007 蜥蜴
题面 拆点跑最大流 所有能跑出去的点连向汇点,容量为inf 原点连向所有初始有蜥蜴的点,容量为1 每根柱子拆成两个点“入口”和“出口”,入口向出口连容量为高度的边,出口向别的有高度的柱子的入口连容量为 ...
- [ SCOI 2008 ] 着色方案
\(\\\) \(Description\) 给出\(K\)种颜料各自的个数\(C_i\),每一个颜料只够涂一个格子,求将颜料用完,涂一排格子,每个格子只能涂一次的条件下,相邻两个格子的颜色互不相同的 ...
- [SCOI 2008] 奖励关
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1076 [算法] f[i][S]表示当前第i次抛出宝物,目前集合为S,所能获得的最高分 ...
- SCOI 2008 【奖励关】
早上的考试一道都做不出,被教做人,心态爆炸ing...... 题目描述: 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必 ...
- 解题:CTSC 2008 祭祀
题面 洛谷要求输出方案,懒得写了,但是还是放一下链接看看吧 (虽然现在二分图已经过气了=.=) 要求最长反链,最长反链=最小链覆盖,先Floyd传递闭包之后链覆盖就变成了边覆盖,然后最小边覆盖=总点数 ...
随机推荐
- java 通过内存映射文件来提高IO读取文件性能
MappedByteBuffer out = new RandomAccessFile("src/demo20/test.dat", "rw"). getCha ...
- mybatis按datetime条件查询,参数为时间戳时
mybatis按datetime条件查询,参数为时间戳时,如果数据库为2018-1-1 20:22:10, 你的时间戳也为2018-1-1 20:22:10,但却没找到数据.可能是时差导致的.百度修正 ...
- CsvHelper文档-3写
CsvHelper文档-3写 不用做任何设置,默认的情况下,csvhelper就可以很好的工作了.如果你的类的属性名称和csv的header名称匹配,那么可以按照下面的例子写入: var record ...
- Python爬虫入门(6):Cookie的使用
为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓 ...
- centos下部署jenkins
本文摘抄自:https://www.cnblogs.com/edward2013/p/5284503.html ,请支持原版! 1. 安装JDK 1 yum -y install java 2.安装 ...
- 20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结
20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172313 余坤澎 20172332 于欣月 20172326 康皓越 小组编程照片 设计思路 通过一个E ...
- FIsherman丶Team
小组成员:郝恒杰,洪佳兴,张子祥 组长:郝恒杰 项目:Fisher Job(渔夫兼职) 简介: 我们的产品渔夫兼职是为了解决大学生兼职群体 的痛苦,他们需要一个好的渠道去找一个让自己满意的兼职,但是现 ...
- 04慕课网《vue.js2.5入门》——Vue-cli开发todolist
主要文件目录: 文件代码: 根实例,初始化vue: <!--index.html,网站入口页面,和main.jsp组成一套.vue文件,包含--> <!DOCTYPE html> ...
- oracle数据库 expdp/impdp 和 exp/imp
--EXPDP导出,需要系统用户权限,一般不使用--sqlplus--1.创建dmp导出逻辑目录 create directory 目录名 as '目录路径' create directory exp ...
- spring-test与junit
1.添加依赖 spring-test junit spring-context(自动添加依赖其他所需的spring依赖包) 2.在class前添加以下注解,用于配置xml文件的位置 @RunWith( ...