• Luogu P1381油滴扩展


    传送门

    数据范围给的很小啊,n >= 0 && n <= 7,所以给了DFS生存的空间。

    对于每一个油滴,可以说在它下一个油滴放置之前,当前的这个油滴的半径并不确定(但是对于边界情况是可以判断的)。

    当把下一个油滴滴入时,当前油滴的半径就已经确定了(如果这个油滴滴在上一个油滴的范围内,就直接return 0,避免冗余计算)。

    注意:在DFS中每次的r[j]和v[j]都要重置为0(血的教训)。

     CODE:

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <cstdlib>
      5 #include <algorithm>
      6 #include <cctype>
      7 #include <queue>
      8 #include <cmath>
      9 #define zxy(i,a,b) for(int i = a ; i <= b ; i++)
     10 #define zxyzxy(i,a,b) for(int i = a ; i < b ; i++)
     11 #define yxz(i,a,b) for(int i = a ; i >= b ; i--)
     12 #define yxzyxz(i,a,b) for(int i = a ; i > b ; i--)
     13 #define gameover printf("
    ")
     14 #define N 1000005
     15 #define mod 100003
     16 #define INF 0x7fffffff
     17 #define PI 3.14159265358979323846
     18 #define y1 y111111111111
     19 #define bin return
     20 typedef long long ll;
     21 typedef double db;
     22 typedef float fl;
     23 typedef char cr;
     24 using namespace std;
     25 int read()
     26 {
     27     int x = 0,t = 1;
     28     char c = getchar();
     29     while((c > '9' || c < '0') && c != '-')
     30         c = getchar();
     31     if(c == '-')
     32         t = -1,c = getchar();
     33     while(c >= '0' && c <= '9')
     34         x = x * 10 + c - 48,c = getchar();
     35     bin x * t;
     36 }
     37 
     38 void write(ll x)
     39 {
     40     if(x < 0)
     41         x = -x,putchar('-');
     42     if(x >= 10)
     43         write(x / 10);
     44     putchar(x % 10 + '0');
     45 }
     46 
     47 int n;
     48 int x2,y2,x1,y1;
     49 int x[N],y[N];
     50 int v[N];
     51 db o = -1,r[N];
     52 int quick_pow(int a,int b)
     53 {
     54     int base = a,ans = 1;
     55     while(b)
     56     {
     57         if(b & 1)
     58             ans = ans * base;
     59         base = base * base;
     60         b>>=1;
     61     }
     62     bin ans;
     63 }
     64 
     65 
     66 db mymin(db a,db b)
     67 {
     68     if(a > b)
     69         return b;
     70     bin a;
     71 }
     72 
     73 db mymax(db a,db b)
     74 {
     75     if(a > b)
     76         return a;
     77     bin b;
     78 }
     79 
     80 db dis(int xx,int yy,int xxx,int yyy)
     81 {
     82     bin sqrt(quick_pow((abs(xx - xxx)),2) + quick_pow((abs(yy - yyy)),2));
     83 }
     84 
     85 db work(int i)
     86 {
     87     zxy(j,1,n)
     88     if(j != i && v[j])
     89         if(r[j] > dis(x[j],y[j],x[i],y[i]))
     90             return 0;
     91     db lr = min(abs(x[i] - x2),abs(x[i] - x1));
     92     db hb = min(abs(y[i] - y2),abs(y[i] - y1));
     93     db ans = mymin(lr,hb);
     94     db distance;
     95     zxy(j,1,n)
     96     if(j != i && v[j])
     97     {
     98         distance = dis(x[j],y[j],x[i],y[i]) - r[j];
     99         ans = min(ans,distance);
    100     }
    101     bin ans;
    102 }
    103 
    104 void DFS(int i,db step)
    105 {
    106     if(i > n)
    107     {
    108         o = mymax(o,step);
    109         bin;
    110     }
    111 
    112     zxy(j,1,n)
    113     {
    114         if(!r[j])
    115         {
    116             r[j] = work(j);
    117             v[j] = 1;
    118             DFS(i + 1,step + PI * r[j] * r[j]);
    119             v[j] = 0;
    120         r[j] = 0;
    121         }
    122     }
    123 }
    124 
    125 int main()
    126 {
    127     n = read();
    128     x2 = read(),y2 = read(),x1 = read(),y1 = read();
    129     db s = abs(x2 - x1) * abs(y2 - y1);
    130     zxy(i,1,n)
    131         x[i] = read(),y[i] = read();
    132     DFS(1,0);
    133 //    cout<<o<<endl;
    134     printf("%.0lf
    ",s - o);
    135     gameover;
    136     bin 0;
    137 }
    138 /*
    139 3 
    140 -98 5 30 30 
    141 -42 11 
    142 -51 17 
    143 -11 22 
    144 */
  • 相关阅读:
    网易在帮助我们泄漏密码吗?
    ADC转换参数——INL_DNL
    高速ADC的关键指标:量化误差、offset/gain error、DNL、INL、ENOB、分辨率、RMS、SFDR、THD、SINAD、dBFS、TWOTONE IMD
    Altium Designer如何批量修改名称,数值,封装,NET颜色
    MAC和PHY的区别
    以太网,IP,TCP,UDP数据包分析
    《西安JAVA培训教学视频西安云工厂旺旺老师》更新struts1.SQLServer.设计模式.JavaScript.JavaWeb
    在DOS命令下写一个简单的HelloWorld程序
    你想遇到什么样的人,你先要成为什么样的人
    一些重要的shell命令
  • 原文地址:https://www.cnblogs.com/Zhoier-Zxy/p/9802409.html
Copyright © 2020-2023  润新知