码迷,mamicode.com
首页 > 其他好文 > 详细

【VIJOS】 p1009-p1012 清帝之惑

时间:2015-08-27 20:46:19      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

原题传送门:https://vijos.org/p/%E6%B8%85%E5%B8%9D%E4%B9%8B%E6%83%91

 

 

雍正

求平面上最近的两点的距离,O(nlogn)算法实现,详解见 http://blog.csdn.net/lytning/article/details/25370169

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

const double eps = 1e-8;
const int INF = 0x7fffffff;

int n;

struct Point {
    double x, y;
    Point( double x = 0, double y = 0 ): x( x ), y( y ) {}
    bool operator < ( const Point& p ) const {
        if( x != p.x )    return x < p.x;
        else    return y < p.y;
    }
} p[200000 + 5], temp[200000 + 5];

bool cmpy( Point a, Point b ) {
    return a.y < b.y;
}

double Dis( Point a, Point b ) {
    return sqrt( ( a.x - b.x ) * ( a.x - b.x ) + ( a.y - b.y ) * ( a.y - b.y ) );
}

double Closest_Pair( int left, int right ) {
    double d = INF;
    if( left == right )
        return d;
    if( left + 1 == right )
        return Dis( p[left], p[right] );
    int mid = ( left + right ) >> 1;
    double d1 = Closest_Pair( left, mid );
    double d2 = Closest_Pair( mid, right );
    d = min( d1, d2 );
    int k = 0;
    for( int i = left; i <= right; i++ ) {
        if( fabs( p[mid].x - p[i].x ) <= d )
            temp[k++] = p[i];
    }
    sort( temp, temp + k, cmpy );
    for( int i = 0; i < k; i++ ) {
        for( int j = i + 1; j < k && temp[j].y - temp[i].y < d; j++ ) {
            double d3 = Dis( temp[i], temp[j] );
            d = min( d, d3 );
        }
    }
    return d;
}


int main() {
    cin >> n;
    for( int i = 0; i < n; i++ ) {
        double a, b;
        scanf( "%lf%lf", &a, &b );
        p[i] = Point( a, b );
    }
    sort( p, p + n );
    printf( "%.3f", Closest_Pair( 0, n - 1 ) );
}

 

乾隆

简单来说,就是求rn的值,r为一个实数(我印象里poj也有一个这样的题吧》代码太丑,这里不贴了,主要是细节处理上的问题

顺治

  深搜,对于每个点进行一次深搜,由于每个点最多访问1次,故时间复杂度为O(rc)

#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#define MAXN 501 
using namespace std;

int dx[5]={0,-1,0,1,0};
int dy[5]={0,0,1,0,-1}; 
int r,c,p,t,ans;
int m[MAXN][MAXN],f[MAXN][MAXN];
int search(int x,int y){
    int t,tmp,nx,ny;
    if(f[x][y]>0)    return f[x][y];
    t=1;
    for(int i=1;i<=4;i++){
        nx=x+dx[i],ny=y+dy[i];
        if(nx>=1&&nx<=r&&ny>=1&&ny<=c&&m[x][y]<m[nx][ny]){
            tmp=search(nx,ny)+1;
            if(tmp>t)
                t=tmp;
        }
    }
    f[x][y]=t;
    return f[x][y];
}
int main()
{
     cin>>r>>c;
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            cin>>m[i][j];
        }
    }   
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            t=search(i,j);
            f[i][j]=t;
            if(t>ans)    ans=t;
        
        }
    }
    cout<<ans;
    return 0;
}

 

康熙

  这是该系列最难的一题。扩展欧几里得算法求线性方程的解(我写成这样 居然没有CE)

#include<iostream>
#include<math.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;  
void gcd(long long a,long long b,long long &d,long long&x,long long &y){
    if (b == 0){
        d = a;
        x = 1;
        y = 0;
    }else{
        gcd(b, a%b, d, y, x);
        y -= x*(a / b);
    }
}

int main(){
    long long x1, x2, v1, v2,len;
    cin >> x1 >> x2 >> v1 >> v2 >> len;
    int dx, dv;
    v1 %= len;
    v2 %= len; 
    x1 %= len;
    x2 %= len;
    if (v1 < v2){ 
        swap(v1, v2);
        swap(x1, x2);
    }
    dv = v1 - v2;
    if (x1<x2){
        dx = x2  - x1;
    }
    else{
        dx = x2+len-x1;
    }
    long long d, k,p; 
    gcd(dv,len, d,k,p);
    if (dx%d){
        cout << "Impossible" << endl;
    }
    else{  
        dv /= d;
        len /= d;
        if (k > 0){  
            cout << (dx*k / d)%len << endl;
        }
        else{    
            cout << ((len + k)*dx / d)%len << endl;
        }
    }
    return 0;
}

 

【VIJOS】 p1009-p1012 清帝之惑

标签:

原文地址:http://www.cnblogs.com/oierforever/p/4764152.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!