可乐这道题我的代码是这样的。
#include<bits/stdc++.h> #define ll long long #define louble long double #define N 100005 using namespace std; int n,m,k; louble x[N],y[N]; int main(){ cin>>n>>m>>k; for(int i=1;i<=k;++i)cin>>x[i]>>y[i]; louble p=1.0*m/n; int root=1; for(int i=2;i<=k;++i){ if(x[i]*p+y[i]*(1-p)>x[root]*p+y[root]*(1-p))root=i;//这里 } for(int i=1;i<=k;++i){ if(i==root)printf("%d ",n); else printf("0 "); } return 0; }这份代码只能过95%。
但是把那个大于号改为大于等于,他就过了。
#include<bits/stdc++.h> #define ll long long #define louble long double #define N 100005 using namespace std; int n,m,k; louble x[N],y[N]; int main(){ cin>>n>>m>>k; for(int i=1;i<=k;++i)cin>>x[i]>>y[i]; louble p=1.0*m/n; int root=1; for(int i=2;i<=k;++i){ if(x[i]*p+y[i]*(1-p)>=x[root]*p+y[root]*(1-p))root=i;//这里 } for(int i=1;i<=k;++i){ if(i==root)printf("%d ",n); else printf("0 "); } return 0; }这道题目要求字典序最小,不应该就是写大于号吗?
全部评论
(1) 回帖