如题,直接枚举每一个flag,计算A几倍杀B / B几倍杀A,
然后乱搞比较出答案。感觉思路没问题,不过WA了最后三点。
code:
#include<bits/stdc++.h>
using namespace std;
double mod=0.000000000001;
int n,s,t;
int op[1001],A[1001],B[1001];
double k[1001];
int C;
double dis[1001];
double ans=-1;
int main()
{
scanf("%d%d%d",&n,&s,&t);
for(int i=1;i<=s;i++)
{
scanf("%d%d%d%lf",&op[i],&A[i],&B[i],&k[i]);
}
for(int i=1;i<=t;i++)
{
scanf("%d",&C);scanf("%lf",&dis[C]);
}
for(int i=1;i<=s;i++)
{
if(dis[A[i]]!=0&&dis[B[i]]!=0)
{
double a;
if(op[i]==1)
{
a=dis[A[i]]/dis[B[i]];
if(a<k[i])
{
double t=k[i]-a-mod;
if(t>ans)ans=t;
}
}
else{
a=dis[B[i]]/dis[A[i]];
if(a>k[i])
{
double t=a-k[i];
if(t>ans)ans=t;
}
}
}
}
if(ans==-1)printf("-1\n");
else printf("%.10lf\n",ans);
return 0;
}
难道这题只能差分约束+二分答案吗