Gym 100197G Robbers (卡精度)

本文介绍了ACM-ICPC中的一道题目Gym 100197G Robbers,该题目存在两个主要难点:一是需要精确处理浮点数计算,二是输入文件名与题目描述不符,这两个问题对参赛者造成了一定困扰。

Robbers (题目链接)


这题有两个坑。。

1是卡精度

2是读入文件不是题面的名字


/*************************************************************************
     File Name: G.cpp
     ID: obsoles1
     PROG: 
     LANG: C++ 
     Mail: 384099319@qq.com 
     Created Time: 一  8/29 17:41:20 2016
 ************************************************************************/
#define ABS(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#include<cstdio>
#include<queue>
const int N=1010;
const double eps=1e-6;
struct node{
  int x,id,k;
  double diff;
  bool operator < (const node &rhs) const {
    return diff-rhs.diff<eps || (ABS(diff,rhs.diff)<eps && id<rhs.id);
  }
}x;
int ans[N];

int main() {
  int n,m,y,i;
  freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);//坑!!!
  scanf("%d%d%d",&n,&m,&y);
  int per=m/y,left=m-per*y;
  double per1=(double)m/y;
  std::priority_queue<node> q;
  for (i=0; i<n; ++i) {
    scanf("%d",&x.x);
    x.id=i;
    x.k=per*x.x;
    x.diff=per1*x.x-x.k*1.0;
    q.push(x);
  }
  while (left) {
    x=q.top(),q.pop();
    x.diff-=1.0;
    x.k++;
    left--;
    q.push(x);
  }
  while (!q.empty()) {
    x=q.top(),q.pop();
    ans[x.id]=x.k;
  }
  for (i=0; i<n; ++i)
    printf("%d%c",ans[i]," \n"[i==n-1]);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值