Submission #83775


Source Code Expand

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include<cassert>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
#include<bitset>

#define REP(i,b,n) for(int i=b;i<(int)n;i++)
#define rep(i,n)   REP(i,0,n)
#define ALL(C)     (C).begin(),(C).end()
#define FOR(it,o)  for(__typeof((o).begin()) it=(o).begin(); it!=(o).end(); ++it)
#define dbg(x) cout << __LINE__ << ' ' << #x << " = " << (x) << endl


typedef long long ll;

using namespace std;

const int MAX_V = 1000;
const double INF = 1e9;
 
class State{
public:
  double cost;
  int pos;
  bool operator<(const State &s)const{
    return cost > s.cost;
  }
};
 
class Edge{
public:
  int to, cap;
  double cost;
  int rev;
};
 
int V;
double dist[MAX_V];
int prevv[MAX_V], preve[MAX_V];//頂点数、ポテンシャル、距離、前の頂点、前のエッジ
vector<Edge> G[MAX_V];
 
void addEdge(int from, int to, int cap, double cost){
  G[from].push_back((Edge){to, cap, cost, G[to].size()});
  G[to].push_back((Edge){from, 0, -cost, G[from].size()-1});
}
 
double min_cost_flow(int s, int t, int f){
  double ret = 0;
  while(f>0){
    rep(i, V)dist[i] = INF;
    dist[s] = 0;
    bool update = true;
    while(update){
      update =false;
      rep(v, V){
	if(dist[v] == INF)continue;
	rep(i, G[v].size()){
	  Edge &e = G[v][i];
	  if(e.cap >0 && dist[e.to] > dist[v] + e.cost){
	    dist[e.to] = dist[v] + e.cost;
	    prevv[e.to] = v;
	    preve[e.to] = i;
	    update = true;
	  }
	}
      }
    }
    if(dist[t] == INF)return 0;

    //増加路に流す
    int mini = f;
    for(int v = t;v != s; v = prevv[v]){
      mini = min(mini, G[prevv[v]][preve[v]].cap);
    }
    f -= mini;
    ret += mini * dist[t];
    for(int v = t; v != s; v= prevv[v]){
      Edge &e = G[prevv[v]][preve[v]];
      e.cap -= mini;
      G[v][e.rev].cap += mini;
    }
  }
  return ret;
}

class P{
public:
  int x, y;
};

const int N = 100;

P p[N];

double getDist(P p1, P p2){
  double x = abs(p1.x) - abs(p2.x);
  double y = p1.y - p2.y;
  return sqrt(x*x + y*y);
}

int main(){
  int n;
  while(cin >> n){
    rep(i, MAX_V)G[i].clear();
    rep(i, n){
      cin >> p[i].x >> p[i].y;
    }
    vector<P> left, right;
    double ans = 0;
    rep(i, n){
      ans += abs(p[i].x);
      if(p[i].x < 0)left.push_back(p[i]);
      else if(p[i].x >0)right.push_back(p[i]);
    }
    int L = left.size(), R = right.size();
    V = L + R + 2;
    rep(i, L){
      addEdge(L+R, i, 1, 0);
    }
    rep(i, R){
      addEdge(L+i, L+R+1, 1, 0);
    }
    rep(i, L){
      rep(j, R){
	addEdge(i, L+j, 1, min(getDist(left[i], right[j]) - (double)abs(left[i].x) - (double)abs(right[j].x), 0.));
      }
    }
    printf("%.9lf\n", ans + min_cost_flow(L+R, L+R+1, min(L, R)));
  }
  return 0;
}

Submission Info

Submission Time
Task B - 玉座の間
User shioshiota
Language C++ (G++ 4.6.4)
Score 200
Code Size 3111 Byte
Status AC
Exec Time 27 ms
Memory 916 KB

Judge Result

Set Name Subtask1 Subtask2 Subtask3 Subtask4
Score / Max Score 50 / 50 50 / 50 50 / 50 50 / 50
Status
AC × 25
AC × 50
AC × 75
AC × 100
Set Name Test Cases
Subtask1 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt
Subtask2 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt, 21_rand00.txt, 21_rand01.txt, 21_rand02.txt, 21_rand03.txt, 21_rand04.txt, 21_rand05.txt, 21_rand06.txt, 21_rand07.txt, 21_rand08.txt, 21_rand09.txt, 21_rand10.txt, 21_rand11.txt, 21_rand12.txt, 21_rand13.txt, 21_rand14.txt, 21_rand15.txt, 21_rand16.txt, 21_rand17.txt, 21_rand18.txt, 21_rand19.txt, 21_rand20.txt, 21_rand21.txt, 21_rand22.txt, 21_rand23.txt, 21_rand24.txt
Subtask3 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt, 21_rand00.txt, 21_rand01.txt, 21_rand02.txt, 21_rand03.txt, 21_rand04.txt, 21_rand05.txt, 21_rand06.txt, 21_rand07.txt, 21_rand08.txt, 21_rand09.txt, 21_rand10.txt, 21_rand11.txt, 21_rand12.txt, 21_rand13.txt, 21_rand14.txt, 21_rand15.txt, 21_rand16.txt, 21_rand17.txt, 21_rand18.txt, 21_rand19.txt, 21_rand20.txt, 21_rand21.txt, 21_rand22.txt, 21_rand23.txt, 21_rand24.txt, 31_rand00.txt, 31_rand01.txt, 31_rand02.txt, 31_rand03.txt, 31_rand04.txt, 31_rand05.txt, 31_rand06.txt, 31_rand07.txt, 31_rand08.txt, 31_rand09.txt, 31_rand10.txt, 31_rand11.txt, 31_rand12.txt, 31_rand13.txt, 31_rand14.txt, 31_rand15.txt, 31_rand16.txt, 31_rand17.txt, 31_rand18.txt, 31_rand19.txt, 31_rand20.txt, 31_rand21.txt, 31_rand22.txt, 31_rand23.txt, 31_rand24.txt
Subtask4 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt, 21_rand00.txt, 21_rand01.txt, 21_rand02.txt, 21_rand03.txt, 21_rand04.txt, 21_rand05.txt, 21_rand06.txt, 21_rand07.txt, 21_rand08.txt, 21_rand09.txt, 21_rand10.txt, 21_rand11.txt, 21_rand12.txt, 21_rand13.txt, 21_rand14.txt, 21_rand15.txt, 21_rand16.txt, 21_rand17.txt, 21_rand18.txt, 21_rand19.txt, 21_rand20.txt, 21_rand21.txt, 21_rand22.txt, 21_rand23.txt, 21_rand24.txt, 31_rand00.txt, 31_rand01.txt, 31_rand02.txt, 31_rand03.txt, 31_rand04.txt, 31_rand05.txt, 31_rand06.txt, 31_rand07.txt, 31_rand08.txt, 31_rand09.txt, 31_rand10.txt, 31_rand11.txt, 31_rand12.txt, 31_rand13.txt, 31_rand14.txt, 31_rand15.txt, 31_rand16.txt, 31_rand17.txt, 31_rand18.txt, 31_rand19.txt, 31_rand20.txt, 31_rand21.txt, 31_rand22.txt, 31_rand23.txt, 31_rand24.txt, 41_rand00.txt, 41_rand01.txt, 41_rand02.txt, 41_rand03.txt, 41_rand04.txt, 41_rand05.txt, 41_rand06.txt, 41_rand07.txt, 41_rand08.txt, 41_rand09.txt, 41_rand10.txt, 41_rand11.txt, 41_rand12.txt, 41_rand13.txt, 41_rand14.txt, 41_rand15.txt, 41_rand16.txt, 41_rand17.txt, 41_rand18.txt, 41_rand19.txt, 41_rand20.txt, 41_rand21.txt, 41_rand22.txt, 41_rand23.txt, 41_rand24.txt
Case Name Status Exec Time Memory
11_rand00.txt AC 19 ms 780 KB
11_rand01.txt AC 21 ms 732 KB
11_rand02.txt AC 21 ms 780 KB
11_rand03.txt AC 20 ms 780 KB
11_rand04.txt AC 20 ms 784 KB
11_rand05.txt AC 20 ms 780 KB
11_rand06.txt AC 21 ms 736 KB
11_rand07.txt AC 21 ms 732 KB
11_rand08.txt AC 21 ms 788 KB
11_rand09.txt AC 20 ms 776 KB
11_rand10.txt AC 20 ms 784 KB
11_rand11.txt AC 20 ms 776 KB
11_rand12.txt AC 21 ms 780 KB
11_rand13.txt AC 20 ms 736 KB
11_rand14.txt AC 20 ms 780 KB
11_rand15.txt AC 21 ms 784 KB
11_rand16.txt AC 20 ms 736 KB
11_rand17.txt AC 20 ms 784 KB
11_rand18.txt AC 18 ms 736 KB
11_rand19.txt AC 21 ms 736 KB
11_rand20.txt AC 20 ms 796 KB
11_rand21.txt AC 21 ms 784 KB
11_rand22.txt AC 22 ms 780 KB
11_rand23.txt AC 23 ms 776 KB
11_rand24.txt AC 21 ms 700 KB
21_rand00.txt AC 21 ms 0 KB
21_rand01.txt AC 21 ms 784 KB
21_rand02.txt AC 20 ms 780 KB
21_rand03.txt AC 19 ms 784 KB
21_rand04.txt AC 18 ms 780 KB
21_rand05.txt AC 20 ms 784 KB
21_rand06.txt AC 21 ms 736 KB
21_rand07.txt AC 22 ms 796 KB
21_rand08.txt AC 20 ms 792 KB
21_rand09.txt AC 21 ms 780 KB
21_rand10.txt AC 21 ms 784 KB
21_rand11.txt AC 21 ms 780 KB
21_rand12.txt AC 21 ms 732 KB
21_rand13.txt AC 20 ms 776 KB
21_rand14.txt AC 20 ms 780 KB
21_rand15.txt AC 21 ms 780 KB
21_rand16.txt AC 21 ms 780 KB
21_rand17.txt AC 21 ms 780 KB
21_rand18.txt AC 20 ms 780 KB
21_rand19.txt AC 20 ms 784 KB
21_rand20.txt AC 21 ms 780 KB
21_rand21.txt AC 20 ms 784 KB
21_rand22.txt AC 20 ms 792 KB
21_rand23.txt AC 21 ms 780 KB
21_rand24.txt AC 21 ms 776 KB
31_rand00.txt AC 20 ms 788 KB
31_rand01.txt AC 20 ms 784 KB
31_rand02.txt AC 21 ms 780 KB
31_rand03.txt AC 21 ms 780 KB
31_rand04.txt AC 20 ms 788 KB
31_rand05.txt AC 21 ms 788 KB
31_rand06.txt AC 21 ms 772 KB
31_rand07.txt AC 19 ms 776 KB
31_rand08.txt AC 20 ms 780 KB
31_rand09.txt AC 21 ms 780 KB
31_rand10.txt AC 19 ms 772 KB
31_rand11.txt AC 21 ms 708 KB
31_rand12.txt AC 21 ms 776 KB
31_rand13.txt AC 21 ms 732 KB
31_rand14.txt AC 20 ms 780 KB
31_rand15.txt AC 20 ms 772 KB
31_rand16.txt AC 21 ms 764 KB
31_rand17.txt AC 20 ms 784 KB
31_rand18.txt AC 20 ms 784 KB
31_rand19.txt AC 21 ms 732 KB
31_rand20.txt AC 21 ms 780 KB
31_rand21.txt AC 21 ms 788 KB
31_rand22.txt AC 20 ms 780 KB
31_rand23.txt AC 21 ms 780 KB
31_rand24.txt AC 21 ms 784 KB
41_rand00.txt AC 20 ms 788 KB
41_rand01.txt AC 20 ms 772 KB
41_rand02.txt AC 21 ms 784 KB
41_rand03.txt AC 23 ms 780 KB
41_rand04.txt AC 21 ms 908 KB
41_rand05.txt AC 19 ms 784 KB
41_rand06.txt AC 21 ms 784 KB
41_rand07.txt AC 24 ms 908 KB
41_rand08.txt AC 20 ms 780 KB
41_rand09.txt AC 20 ms 784 KB
41_rand10.txt AC 21 ms 788 KB
41_rand11.txt AC 22 ms 900 KB
41_rand12.txt AC 23 ms 916 KB
41_rand13.txt AC 21 ms 784 KB
41_rand14.txt AC 21 ms 796 KB
41_rand15.txt AC 20 ms 780 KB
41_rand16.txt AC 21 ms 780 KB
41_rand17.txt AC 22 ms 784 KB
41_rand18.txt AC 27 ms 908 KB
41_rand19.txt AC 25 ms 912 KB
41_rand20.txt AC 23 ms 724 KB
41_rand21.txt AC 21 ms 780 KB
41_rand22.txt AC 21 ms 784 KB
41_rand23.txt AC 23 ms 908 KB
41_rand24.txt AC 20 ms 908 KB