2021.07.23 P2474 天平(差分约束)

[P2474 SCOI2008]天平 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意:

已知A,B和每两个点点权,求点权i,j,使得A+B>i+j的方案数ans1,A+B==i+j的方案数ans2,A+B<i+j的方案数ans3。

分析:

A+B>i+j可以化为A-i>j-B||i-A<B-j;A+Bi+j可以化为A-ij-B||i-A==B-j;A+B<i+j可以化为A-i<j-B||i-A>B-j。当然,i也可以与B搭配,j也可以与A搭配。所以对于每个条件都有两个式子。接下来,欢迎差分约束上台表演!maxn(i,j)表示从点i到点j之间最大值,minn(i,j)表示从点i到点j最小值。

代码如下:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int n,A,B,maxn[55][55],minn[55][55],ans1,ans2,ans3;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int main(){
n=read();A=read();B=read();
string a;
for(int i=1;i<=n;i++){
cin>>a;
for(int j=0;j<a.size();j++){
if(i==j+1||a[j]=='=')maxn[i][j+1]=minn[i][j+1]=0;
else if(a[j]=='-')maxn[i][j+1]=-1,minn[i][j+1]=-2;//二者差最大为2,最小为1,这里i<j,用负号
else if(a[j]=='+')maxn[i][j+1]=2,minn[i][j+1]=1;//二者差最大为2,最小为1,这里i>j,用正号
else maxn[i][j+1]=2,minn[i][j+1]=-2;//这里是最大差2
}
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
if(i==k)continue;
for(int j=1;j<=n;j++){
if(i==j)continue;
maxn[i][j]=min(maxn[i][k]+maxn[k][j],maxn[i][j]);//求最大值的最小值,为了满足更多约束条件
minn[i][j]=max(minn[i][k]+minn[k][j],minn[i][j]);//求最小值的最大值,为了满足更多约束条件
}
}
}
for(int i=1;i<=n;i++){
if(i==A||i==B)continue;
for(int j=1;j<i;j++){
if(j==A||j==B)continue;
if(minn[A][i]>maxn[j][B]||minn[B][i]>maxn[j][A])++ans1;//A+B>i+j
else if(minn[i][A]>maxn[B][j]||minn[i][B]>maxn[A][j])++ans3;//A+B<i+j
//此处换为 else if(maxn[A][i]<minn[j][B]||maxn[B][i]<minn[j][A])++ans3; 也可以
else if((maxn[A][i]==minn[j][B]&&minn[A][i]==maxn[j][B]&&maxn[A][i]==minn[A][i])//A+B==i+j
||(maxn[B][i]==minn[j][A]&&minn[B][i]==maxn[j][A]&&maxn[B][i]==minn[B][i]))++ans2;
//当只有唯一一个确定的值才能正式确定“=”
}
}
cout<<ans1<<" "<<ans2<<" "<<ans3;
return 0;
}

2021.07.23 P2474 天平(差分约束)的更多相关文章

  1. 2021.07.23 P3275 糖果(差分约束)

    2021.07.23 P3275 糖果(差分约束) [P3275 SCOI2011]糖果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.为了满足更多更多约束条件,合适地 ...

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

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

  3. [SCOI2008]天平 差分约束

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

  4. 2021.07.19 P2294 狡猾的商人(差分约束)

    2021.07.19 P2294 狡猾的商人(差分约束) [P2294 HNOI2005]狡猾的商人 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.差分约束最长路与最短 ...

  5. 【BZOJ1077】天平(差分约束)

    [BZOJ1077]天平(差分约束) 题面 BZOJ 洛谷 题解 利用矩阵可以很容易得到两个点之间的最大差和最小差,再利用这个信息判断即可.差分约束用\(Floyd\)计算.时间复杂度\(O(n^3) ...

  6. 2021.08.16 P1260 工程规划(差分约束)

    2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ...

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

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

  8. 洛谷 P7515 - [省选联考 2021 A 卷] 矩阵游戏(差分约束)

    题面传送门 emmm--怎么评价这个题呢,赛后学完差分约束之后看题解感觉没那么 dl,可是现场为啥就因为种种原因想不到呢?显然是 wtcl( 先不考虑"非负"及" \(\ ...

  9. UVA 11478 Halum(用bellman-ford解差分约束)

    对于一个有向带权图,进行一种操作(v,d),对以点v为终点的边的权值-d,对以点v为起点的边的权值+d.现在给出一个有向带权图,为能否经过一系列的(v,d)操作使图上的每一条边的权值为正,若能,求最小 ...

随机推荐

  1. 嵌套OOPS导致系统卡死 每个CPU都上报softlockup的问题

    问题现象:在ARM服务器上,构造oops异常,本应该产生panic,进入dump流程,并且系统重启,但是系统并未重启,而是出现了卡死,在串口会隔一段时间就循环打印调用栈信息.如下所示 linux-fA ...

  2. 亚马逊云储存器S3 BCUKET安全性学习笔记

    亚马逊云储存器S3 BCUKET安全性学习笔记 Bugs_Bunny CTF – Walk walk CTF 昨天玩了会这个比赛,碰到这题是知识盲点,来记录一下. 先从题目看起吧. http://ww ...

  3. KMP 算法中的 next 数组

    KMP 算法中对 next 数组的理解 next 数组的意义 此处 next[j] = k:则有 k 前面的浅蓝色区域和 j 前面的浅蓝色区域相同: next[j] 表示当位置 j 的字符串与主串不匹 ...

  4. 说说&和&&的区别?

    &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false.

  5. kafka follower如何与leader同步数据?

    Kafka的复制机制既不是完全的同步复制,也不是单纯的异步复制.完全同步复制要求All Alive Follower都复制完,这条消息才会被认为commit,这种复制方式极大的影响了吞吐率.而异步复制 ...

  6. synchronized 关键字的用法?

    synchronized 关键字可以将对象或者方法标记为同步,以实现对对象和方法的互 斥访问,可以用 synchronized(对象) { - }定义同步代码块,或者在声明方法时 将 synchron ...

  7. 你如何确保 main()方法所在的线程是 Java 程序最后结束 的线程?

    我们可以使用 Thread 类的 join()方法来确保所有程序创建的线程在 main()方法退出前结束.

  8. JS字符串格式化

    //字符串格式化String.prototype.format = function () { var values = arguments; return this.replace(/\{(\d+) ...

  9. I2C总线完全版——I2C总线的结构、工作时序与模拟编程

    I2C总线的结构.工作时序与模拟编程 I2C总线的结构.工作时序与模拟编程I2C总线(Inter Integrated Circuit)是飞利浦公司于上个世纪80年代开发的一种"电路板级&q ...

  10. carsim的一些注意事项

    1.carsim导入simulink中运行的目录下最好有simfile.sim文件,可以再carsim_2016.1_date中找到(文件夹内最下端) 2.carsim导入simulink中如果显示下 ...