zoukankan      html  css  js  c++  java
  • The 2016 ACM-ICPC Asia Qingdao Regional Contest

    A - Relic Discovery

    签到

    #include <cstdio>
    using namespace std;
    int T,n;
    long long ans=0;
    int main()
    {
        scanf("%d",&T);
        for(int t=1; t<=T; t++)
        {
            scanf("%d",&n);
            ans=0;
            for(int i=1; i<=n; i++)
            {
                int a,b;
                scanf("%d%d",&a,&b);
                ans+=a*b;
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
    

      

    B - Pocket Cube

    直接模拟六种转法。

    #include <cstdio>
    
    using namespace std;
    int T,n;
    long long ans=0;
    int st[200];
    int t[200];
    
    int check()
    {
        for (int j = 1; j <= 24; j += 4)
        {
            int i = j+'a'-1;
            if (t[i] != t[i+1] || t[i+1] != t[i+2] || t[i+2] != t[i+3]) return 0;
        }
        return 1;
    }
    
    int mov(char a, char b, char c, char d, char e, char f, char g, char h)
    {
        int k;
        for (int i = 1; i <= 24; i++) t[i+'a'-1] = st[i+'a'-1];
    
        for (int i = 1; i <= 2; i++)
            k = t[a], t[a] = t[b], t[b] = t[c], t[c] = t[d], t[d] = t[e], t[e] = t[f], t[f] = t[g], t[g] = t[h], t[h] = k;
        if (check()) return 1;
    
        for (int i = 1; i <= 24; i++) t[i+'a'-1] = st[i+'a'-1];
        for (int i = 1; i <= 2; i++)
            k = t[h], t[h] = t[g], t[g] = t[f], t[f] = t[e], t[e] = t[d], t[d] = t[c], t[c] = t[b], t[b] = t[a], t[a] = k;
        if (check()) return 1;
        return 0;
    }
    
    
    int main()
    {
        int T;
        scanf("%d", &T);
        for (int ca = 1; ca <= T; ca++)
        {
            for (int i = 1; i <= 24; i++) scanf("%d", &st[i+'a'-1]);
            int flag = 0;
    
            for (int i = 1; i <= 24; i++)
                t[i+'a'-1] = st[i+'a'-1];
            if (check()) flag = 1;
            if (mov('a','c','e','g','i','k','m','o')) flag = 1;
            if (mov('q','s','g','h','x','v','n','m')) flag = 1;
            if (mov('q','r','a','b','u','v','l','k')) flag = 1;
            if (flag) printf("YES
    ");
                else printf("NO
    ");
        }
        return 0;
    }
    

      

    C - Pocky

    记住ln(2)=0.693147。故ans = ln(L) / ln(d)。

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    
    
    int main()
    {
        int t;
        scanf("%d", &t);
        for (int ca = 1; ca <= t; ca++)
        {
            double l, d;
            scanf("%lf%lf", &l, &d);
            if (l <= d) printf("0.000000
    ");
                else printf("%.6f
    ", 1+log(l/d));
        }
    }
    

      

    D - Lucky Coins

    E - Fibonacci

    F - Lambda Calculus

    G - Coding Contest

    H - Pattern

    I - Travel Brochure

    J - Cliques

    K - Finding Hotels

    K-d树。题目数据有问题,爆搜也能过。下面的AC代码连样例都过不了。。这数据水的一批。

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #include <cmath>
    #include <cstdlib>
    
    
    using namespace std;
    const int MAXN=2e5+100;
    const int DIM=10;
    inline double sqr(double x){
        return x*x;
    }
    namespace KDTree{
        int K;
        struct Point{
            int x[DIM];
            int price, id;
            double distance(const Point& b)const{
                double ret=0;
                for(int i=0;i<K;i++){
                    ret+=sqr(x[i]-b.x[i]);
                }
                return ret;
            }
            void input(int lll){
                id = lll;
                for(int i=0;i<K;i++)scanf("%d",&x[i]);
                scanf("%d", &price);
            }
            void output(){
                printf("%d %d %d
    ",x[0], x[1], price);
            }
        };
        struct qnode{
            Point p;
            double dis;
            qnode(){}
            qnode(Point _p,double _dis){
                p=_p;dis=_dis;
            }
            bool operator<(const qnode &b)const{
                if (fabs(dis-b.dis) < 0.00001) return p.id < b.p.id;
                return dis<b.dis;
            }
        };
        priority_queue<qnode>q;
        struct cmpx{
            int div;
            cmpx(const int &_div){
                div=_div;
            }
            bool operator()(const Point &a,const Point &b){
                for(int i=0;i<K;i++){
                    if(a.x[(div+i)%K]!=b.x[(div+i)%K]){
                        if (a.x[(div+i)%K] !=b.x[(div+i)%K]) return a.x[(div+i)%K]<b.x[(div+i)%K];
                        return a.id<b.id;
                    }
                }
                return true;
            }
        };
        bool cmp(const Point &a,const Point &b,int div){
            cmpx cp=cmpx(div);
            return cp(a,b);
        }
        struct Node{
            Point e;
            Node *lc,*rc;
            int div;
        }pool[MAXN],*tail,*root;
        void init(){
            tail=pool;
        }
        Node *build(Point *a,int l,int r,int div){
            if(l>=r)return NULL;
            Node *p=tail++;
            p->div=div;
            int mid=(l+r)/2;
            nth_element(a+l,a+mid,a+r,cmpx(div));
            p->e=a[mid];
            p->lc=build(a,l,mid,(div+1)%K);
            p->rc=build(a,mid+1,r,(div+1)%K);
            return p;
        }
        void search(Point p,Node *x,int div,int m){
            if(!x)return;
            if(cmp(p,x->e,div)){
                search(p,x->lc,(div+1)%K,m);
                if(q.size()<m){
                    if (x->e.price <= p.price)
                        q.push(qnode(x->e,p.distance(x->e)));
                    search(p,x->rc,(div+1)%K,m);
                }else{
                    if(p.distance(x->e)<q.top().dis){
                        if (x->e.price <= p.price)
                            q.pop(), q.push(qnode(x->e,p.distance(x->e)));
                    }
                    if(sqr(x->e.x[div]-p.x[div])<q.top().dis){
                        search(p,x->rc,(div+1)%K,m);
                    }
                }
            }else{
                search(p,x->rc,(div+1)%K,m);
                if(q.size()<m){
                    if (x->e.price <= p.price) q.push(qnode(x->e,p.distance(x->e)));
                    search(p,x->lc,(div+1)%K,m);
                }else{
                    if(p.distance(x->e)<q.top().dis){
                        if (x->e.price <= p.price)
                            q.pop(), q.push(qnode(x->e,p.distance(x->e)));
                    }
                    if(sqr(x->e.x[div]-p.x[div])<q.top().dis)
                        search(p,x->lc,(div+1)%K,m);
                }
            }
        }
        void search(Point p,int m){
            while(!q.empty())q.pop();
            search(p,root,0,m);
        }
    };
    KDTree::Point p[MAXN];
    int main(){
        int t;
        scanf("%d", &t);
        for (int ca = 1; ca<=t; ca++)
        {
            int n, Q;
            scanf("%d%d",&n, &Q);
            KDTree::K=2;
            for(int i=0;i<n;i++)p[i].input(i);
            KDTree::init();
            KDTree::root=KDTree::build(p,0,n,0);
    
    
            KDTree ::Point o;
            while(Q--){
                o.input(1000000);
                int m;
                //scanf("%d",&m);
                m = 1;
                KDTree::search(o,1);
                int cnt=0;
                while(!KDTree::q.empty()){
                    p[cnt++]=KDTree::q.top().p;
                    KDTree::q.pop();
                }
                //printf(":::::");
                p[0].output();
                //printf("%d
    ", p[0].id);
            }
        }
        return 0;
    }
    

      

    L - Tower Attack

    M - Generator and Monitor

  • 相关阅读:
    【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)
    Educational Codeforces Round 73 (Rated for Div. 2)F(线段树,扫描线)
    【PAT甲级】1042 Shuffling Machine (20 分)
    【PAT甲级】1041 Be Unique (20 分)(多重集)
    【PAT甲级】1040 Longest Symmetric String (25 分)(cin.getline(s,1007))
    【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)
    Codeforces Round #588 (Div. 2)E(DFS,思维,__gcd,树)
    2017-3-9 SQL server 数据库
    2017-3-8 学生信息展示习题
    2017-3-5 C#基础 函数--递归
  • 原文地址:https://www.cnblogs.com/ruthank/p/9740894.html
Copyright © 2011-2022 走看看