• cdqz2017-test11-占卜的准备


    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    
    #define N 201
    
    pair<int,int>p[N];
    char s[N];
    
    int ans[N],cnt;
    
    bool vis[N];
    
    int start;
    int tmp[N];
    
    void read(int &x)
    {
        x=0; char c=getchar();
        while(!isdigit(c)) c=getchar();
        while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); } 
    }
    
    pair<int,int> operator - (pair<int,int> a,pair<int,int> b) { return make_pair(a.first-b.first,a.second-b.second); }
    
    int Cross(pair<int,int> a,pair<int,int> b) { return a.first*b.second-a.second*b.first; }
    
    bool cmp(int a,int b)
    {
        return Cross(p[a]-p[start],p[b]-p[start])>0;
    }
    
    int main()
    {
        freopen("divination.in","r",stdin);
        freopen("divination.out","w",stdout);
        int n;
        read(n);
        for(int i=1;i<=n;++i) read(p[i].first),read(p[i].second);
        scanf("%s",s+1);
        start=1;
        for(int i=2;i<=n;++i) 
            if(p[i]<p[start]) start=i;
        ans[++cnt]=start; 
        vis[start]=true;
        int m;
        for(int i=1;i<=n-2;++i)
        {
            m=0;
            for(int j=1;j<=n;++j)
                if(!vis[j]) tmp[++m]=j; 
            sort(tmp+1,tmp+m+1,cmp);
            if(s[i]=='L') start=tmp[1];
            else start=tmp[m];
            ans[++cnt]=start;
            vis[start]=true;
        }
        for(int i=1;i<n;++i) printf("%d ",ans[i]);
        for(int i=1;i<=n;++i) if(!vis[i]) printf("%d",i);
    }
  • 相关阅读:
    一类分治问题
    [POI2005]DWU-Double-row
    [SCOI2007]降雨量
    [POI2007]ODW-Weights(贪心)
    bzoj3427小P的牧场(斜率优化dp)
    UVA10559 Blocks(区间dp)
    LOJ6089 小Y的背包计数问题(根号优化背包)
    [APIO2008]免费道路(生成树)
    bzoj4383(拓扑排序)
    [HEOI2014]平衡(整数划分数)
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/8710375.html
Copyright © 2020-2023  润新知