题目描述

你有n个砝码,均为1克,2克或者3克。你并不清楚每个砝码的重量,但你知道其中一些砝码重量的大小关系。你把其中两个砝码A 和B 放在天平的左边,需要另外选出两个砝码放在天平的右边。问:有多少种选法使得天平的左边重(c1)、一样重(c2)、右边重(c3)?(只有结果保证惟一 的选法才统计在内)

输入输出格式

输入格式:

第一行包含三个正整数n,A,B(1<=A,B<=N,A 和B 不相等)。砝码编号

为1~N。以下n行包含重量关系矩阵,其中第i行第j个字符为加号“+”表示砝

码i比砝码j重,减号“-”表示砝码i比砝码j 轻,等号“=”表示砝码i和砝码

j一样重,问号“?”表示二者的关系未知。存在一种情况符合该矩阵。

输出格式:

仅一行,包含三个整数,即c1,c2和c3。

输入输出样例

输入样例#1:
复制

6 2 5
?+????
-?+???
?-????
????+?
???-?+
????-?
输出样例#1: 复制

1 4 1
输入样例#2: 复制

14 8 4
?+???++?????++
-??=?=???????=
??????????=???
?=??+?==??????
???-???-???-??
-=????????????
-??=???=?-+???
???=+?=???????
??????????????
??????+???????
??=???-????-??
????+?????+???
-?????????????
-=????????????
输出样例#2: 复制

18 12 11

说明

4<=n<=50

A+B>C+D <=> A-C>D-B 由此我们可以使用差分约束

用数组Max[i][j],Min[i][j]分别表示 i-j 的最大值和最小值,使用Floyd

对这个数组用Floyd,就可以求出最终两点间的大小关系

Max[i][j]=min(Max[i][j],Max[i][k]+Max[k][j])

Min[i][j]=max(Min[i][j],Min[i][k]+Min[k][j])

拿Max来说明:比如i-j<=2,i-k<=1,k-j<=0

那么显然i-j条件就变成i-j<=1

于是判断就可以枚举两个砝码

如果Min[s1][i]>Max[j][s2]那么显然大小关系是确定的

就有s1-i>j-s2   =>   s1+s2>i+j  于是c1可以+1

c2和c3同理

zyys(贼有意思)

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int Max[][],Min[][];
char s[];
int n,s1,s2,c1,c2,c3;
int main()
{int i,j,k,l;
cin>>n>>s1>>s2;
for (i=;i<=n;i++)
{
scanf("%s",s);
l=strlen(s);
for (j=;j<l;j++)
{
if (s[j]=='='||i==j+)
Max[i][j+]=,Min[i][j+]=;
else
if (s[j]=='+')
Max[i][j+]=,Min[i][j+]=;
else
if (s[j]=='-')
Max[i][j+]=-,Min[i][j+]=-;
else
if (s[j]=='?')
Max[i][j+]=,Min[i][j+]=-;
}
}
for (k=;k<=n;k++)
for (i=;i<=n;i++)
if (i!=k)
{
for (j=;j<=n;j++)
if (i!=j&&k!=j)
{
Max[i][j]=min(Max[i][j],Max[i][k]+Max[k][j]);
Min[i][j]=max(Min[i][j],Min[i][k]+Min[k][j]);
}
}
for (i=;i<=n;i++)
if (i!=s1&&i!=s2)
{
for (j=;j<i;j++)
if (j!=s1&&j!=s2)
{
if (Min[s1][i]>Max[j][s2]||Min[s1][j]>Max[i][s2])
c1++;
if (Max[s1][i]<Min[j][s2]||Max[s2][i]<Min[j][s1])
c3++;
if ((Max[s1][i]==Min[s1][i]&&Max[j][s2]==Min[j][s2]&&Max[s1][i]==Max[j][s2])||(Max[s1][j]==Min[s1][j]&&Max[i][s2]==Min[i][s2]&&Max[s1][j]==Max[i][s2])) c2++;
}
}
cout<<c1<<' '<<c2<<' '<<c3;
}

[SCOI2008]天平的更多相关文章

  1. 【洛谷】2474:[SCOI2008]天平【差分约束系统】

    P2474 [SCOI2008]天平 题目背景 2008四川NOI省选 题目描述 你有n个砝码,均为1克,2克或者3克.你并不清楚每个砝码的重量,但你知道其中一些砝码重量的大小关系.你把其中两个砝码A ...

  2. 洛谷P2474 [SCOI2008]天平

    P2474 [SCOI2008]天平 题目背景 2008四川NOI省选 题目描述 你有n个砝码,均为1克,2克或者3克.你并不清楚每个砝码的重量,但你知道其中一些砝码重量的大小关系.你把其中两个砝码A ...

  3. 洛谷2474 [SCOI2008] 天平 差分约束->枚举

    题目描述 你有n个砝码,均为1克,2克或者3克.你并不清楚每个砝码的重量,但你知道其中一些砝码重量的大小关系.你把其中两个砝码A 和B 放在天平的左边,需要另外选出两个砝码放在天平的右边.问:有多少种 ...

  4. BZOJ1077 : [SCOI2008]天平

    首先通过差分约束系统建图,用Floyed算法求出任意两个砝码差值的上下界. 然后暴力枚举放在右边的砝码C,D,通过与A,B差值的上下界分类讨论统计方案. 时间复杂度$O(N^3)$. #include ...

  5. [SCOI2008]天平 差分约束

    ---题面--- 题解: 差分约束学得实在是太烂了,,,,QAQ 这里先记下: a - b >= x  ---> a >= b + x     ---->        b - ...

  6. [luogu2474 SCOI2008]天平(floyd差分约束)

    传送门 Solution 由于重量只有三种情况,那么想到用差分约束. 由于范围比较小,想到可以floyed求差分约束,暴力求天平另一边 Code #include <cstdio> #in ...

  7. 2021.07.23 P2474 天平(差分约束)

    2021.07.23 P2474 天平(差分约束) [P2474 SCOI2008]天平 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 已知A,B和每两个点点权,求点权i, ...

  8. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  9. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

随机推荐

  1. 安装/或更新node和npm

    1.安装/或更新node和npm     安装node: node 的官网 nodejs.org 去下载 msi 安装包     更新npm: 使用命令  npm install npm@latest ...

  2. CodeBlocks使用介绍

    CodeBlocks对单个文件没法调试,需要建工程后才能调试,所以使用CodeBlocks必须先建工程. 一.如何用CodeBlocks建工程文件. 选择File->New->Projec ...

  3. 项目Alpha冲刺Day6

    一.会议照片 二.项目进展 1.今日安排 熟悉后台框架并编写.继续搭建前台框架模版.熟悉前端框架开发流程.完成前端热部署配置.完成部分后台用户信息相关接口.解决后台jdk1.8日期在框架中的使用. 2 ...

  4. C语言:第0次作业

    问题1: 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 感性地讲,高中时意外看到了电影<社交网络>,自那时起就将将马克扎克伯格视为偶像,他天才的智慧和长远的眼光深深吸引了我 ...

  5. HTML5 canvas绘制雪花飘落

    Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表.动画等. 没有Canvas的年代,绘图只能借助Flash插件实现,页面不得不用JavaScript和F ...

  6. mycat入门_介绍与安装

    利用闲暇时间接触了下mycat. 一.介绍 1.概述: 国内最活跃的.性能最好的开源数据库中间件,可以理解为数据库和应用层之间的一个代理组件. 2.作用: 读写分离.分表分库.主从切换. 3.原理: ...

  7. php析构方法

    析构方法说明: 1. 析构方法会自动调用 2. 析构方法主要用于销毁资源(比如释放数据库的链接,图片资源...销毁某个对象..); 析构函数会在到对象的所有的引用都被删除或者当对象被显示销毁时执行. ...

  8. 第四章 JavaScript操作DOM对象

    第四章   JavaScript操作DOM对象 一.DOM操作 DOM是Document Object Model的缩写,即文档对象模型,是基于文档编程的一套API接口,1988年,W3C发布了第一级 ...

  9. threadlocal原理及常用应用场景

    1.深入解析ThreadLocal类 ThreadLocal类提供的几个方法: public T get() { } public void set(T value) { } public void  ...

  10. maven安装、配置

    maven的安装和配置 1.将maven解压到自定义文件夹下.例如解压到如下目录(解压目录最好不要有中文字):  2:配置环境变量:一定要注意要用分号:与其他值隔开 3.在cmd中测试,验证是否安装成 ...