您的位置:首页 > 其它

2016 青岛区域赛补题 B(模拟), G(费用流)

2017-10-19 22:40 489 查看
B: 就模拟下。

感觉自己不太熟悉这种代码。

#include<bits/stdc++.h>
using namespace std;
#define N 35
int b
,a
;
//int r[6][8]{
//1,2,22,24,12,11,19,17,
//3,4,21,23,10,9,19,17,
//2,4,16,14,12,10,8,6,
//1,3,5,7,9,11,13,15,
//5,6,21,22,14,13,17,18,
//7,8,23,24,14,13,19,20,
//};
int r[6][8]={
16,17,0,1,20,21,11,10,
18,19,2,3,22,23,9,8,
0,2,4,6,8,10,12,14,
1,3,5,7,9,11,13,15,
4,5,22,20,15,14,17,19,
6,7,23,21,13,12,16,18
};
bool ok(){
for(int i=0;i<6;++i){
int t=b[i*4];
for(int j=1;j<4;++j){
if(b[i*4+j]!=t)return 0;
}
}
return 1;
}
bool solve(){
if(ok())return 1;
for(int i=0;i<6;++i){
for(int j=0;j<24;++j)b[j]=a[j];
for(int j=0;j<8;++j){
b[r[i][j]]=a[r[i][(j+2)%8]];
}
if(ok())return 1;
}
for(int i=0;i<6;++i){
for(int j=0;j<24;++j)b[j]=a[j];
for(int j=0;j<8;++j){
b[r[i][j]]=a[r[i][(j-2+8)%8]];
}
if(ok())return 1;
}
return 0;
}
int main(){
int T;scanf("%d",&T);
//for(int i=0;i<6;++i){
//for(int j=0;j<8;++j){
//r[i][j]--;
//}
//}
while(T--){
for(int i=0;i<24;++i){
scanf("%d",&a[i]);
b[i]=a[i];
}
if(solve())puts("YES");
else puts("NO");
}
}


G:

这个去了对数之后的正负号转不过来。。。

参考:http://blog.csdn.net/xlzhang223/article/details/53260587

int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
init(n+50);
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i],&b[i]);
c[i]=a[i]-b[i];
}
int u,v,f;
double p;
for(int i=0;i<m;i++){
scanf("%d%d%d%lf",&u,&v,&f,&p);
p=-log2(1.0-p);
if(f>0) addedge(u,v,1,0.0);
if(f-1>0) addedge(u,v,f-1,p);
}
for(int i=1;i<=n;i++){
if(c[i]>0) addedge(0,i,c[i],0);
else if(c[i]<0) addedge(i,n+1,-c[i],0);

4000
}
double ans=0;
minCostMaxflow(0,n+1,ans);
ans=pow(2,-ans);
printf("%.2f\n",1.0-ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: