[SCOI2008]天平
阿新 • • 發佈:2018-02-23
困難 pos 包含 存在 sam print oid reg pri
輸出樣例#2:
題目背景
2008四川NOI省選
題目描述
你有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 ?+???++?????++ -??=?=???????= ??????????=??? ?=??+?==?????? ???-???-???-?? -=???????????? -??=???=?-+??? ???=+?=??????? ?????????????? ??????+??????? ??=???-????-?? ????+?????+??? -????????????? -=????????????
18 12 11
說明
4<=n<=50
暴力:25
用拓撲排序確定每個點的重量,然後暴力枚舉哪兩個點。
但是拓撲序不確定,題目要求確定才能統計,所以WA+T+A
正解:
差分約束。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int N=60; 7 int Max[N][N],Min[N][N]; 8 char s[N];9 int n,A,B,c1,c2,c3; 10 void Floyd() 11 { 12 for(int k=1;k<=n;k++) 13 for(int i=1;i<=n;i++) 14 for(int j=1;j<=n;j++) 15 if(i!=k && i!=j && k!=j) 16 { 17 Max[i][j]=min(Max[i][j],Max[i][k]+Max[k][j]); 18 Min[i][j]=max(Min[i][j],Min[i][k]+Min[k][j]); 19 } 20 } 21 void work() 22 { 23 for(int i=1;i<=n;i++) 24 for(int j=1;j<i;j++) 25 if(i!=A && i!=B && j!=A && j!=B) 26 { 27 if(Min[A][i]>Max[j][B] || Min[A][j]>Max[i][B])c1++; 28 if(Max[A][i]<Min[j][B] || Max[B][i]<Min[j][A])c3++; 29 if(Max[A][i]==Min[A][i] && Max[j][B]==Min[j][B] && Max[A][i]==Max[j][B]) c2++; 30 else if(Max[A][j]==Min[A][j] && Max[i][B]==Min[i][B] && Max[A][j]==Max[i][B]) c2++; 31 } 32 printf("%d %d %d",c1,c2,c3); 33 } 34 int main() 35 { 36 scanf("%d%d%d",&n,&A,&B); 37 for(int i=1;i<=n;i++) 38 { 39 scanf("%s",s+1); 40 for(int j=1;j<=n;j++) 41 { 42 if(s[j]==‘=‘||i==j+1) Max[i][j]=0,Min[i][j]=0; 43 if(s[j]==‘+‘) Max[i][j]=2,Min[i][j]=1; 44 if(s[j]==‘-‘) Max[i][j]=-1,Min[i][j]=-2; 45 if(s[j]==‘?‘)Max[i][j]=2,Min[i][j]=-2; 46 } 47 } 48 Floyd(); 49 work(); 50 return 0; 51 }
死亡是最簡單不過的事情,但真正困難的是光榮的活下去。
[SCOI2008]天平