ACM-ICPC-Swiss-Subregional 2017 训练日志

solved 7 (2/59)

Chess

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

template<class T>
inline void read(T &ret){
    int sign=1;
    char c=getchar();
    while(c!=‘-‘ && (c>‘9‘||c<‘0‘))c=getchar();
    if(c==‘-‘)sign=-1;
    else ret=c-‘0‘;
    while(c=getchar(),c>=‘0‘&&c<=‘9‘){
        ret=ret*10+c-‘0‘;
    }
    ret*=sign;
}

ll a[200005];
vector<ll> vec[200005];
multiset<ll> st;
unordered_set<ll> st2;
multiset<ll>::iterator it;
int cnt;
int n;
ll maxv=0;
bool zero=0;

int main(){
    read(n);
    for(int i=1;i<=n;i++){
        read(a[i]);
        st.insert(a[i]);
        st2.insert(a[i]);
        if(!a[i])zero=1;
        maxv = max(maxv,a[i]);
    }
    if(zero){
        for(int j=0;;j++){
            if(st.count((1LL<<j))==0){
                return cout<<(1LL<<j),0;
            }
        }
    }

    vec[++cnt].push_back(1);
    st.erase(st.find(1));

    while(1){
        if(st.size()==0)break;

        ll val = vec[cnt].back();
        it = st.find(val*2);
        if(it==st.end()){
            vec[++cnt].push_back(*st.begin());
            st.erase(st.begin());
        } else {
            vec[cnt].push_back(val*2);
            st.erase(it);
        }
    }

    ll valend = vec[1].back()*2;
    ll ans = 0x3f3f3f3f3f3f3f3f;

    multiset<pair<ll,int> >stt;

    for(int i=2;i<=cnt;i++){
        ll mod = valend - vec[i].front();
        if(mod<=maxv)continue;
        stt.insert(make_pair(mod,i));
    }

    if(cnt==1){
        ans = maxv+1;
    }
    else if(cnt==2){
        ans = valend - vec[2][0];
    }

    for(auto pp:stt){
        ll mod = pp.first;
        int id = pp.second;
        if(st2.count(vec[id].back()*2%mod)){
            if(cnt==3||st2.count(((vec[id].back()*2%mod)*2)%mod)) ans = min(ans , mod);
        }
    }
    cout<<ans;
    return 0;
}

B - Triangle in a Triangle

#include <bits/stdc++.h>
using namespace std;
#define maxn 1000006
double ax,ay;
double bx,by;
double cx,cy;

int dista[maxn],distb[maxn],distc[maxn];
int ab,bc,ca;

double a1x,a1y,a2x,a2y;
double b1x,b1y,b2x,b2y;
double c1x,c1y,c2x,c2y;

double lenab,lenbc,lenca;

double dis(double x1,double y1,double x2,double y2){
    return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
}

double mj(double x1,double y1,double x2,double y2,double x3,double y3){
    double a = dis(x1,y1,x2,y2);
    double b = dis(x2,y2,x3,y3);
    double c = dis(x3,y3,x1,y1);
    double p = (a+b+c)/2;
    return sqrt(p*(p-a)*(p-b)*(p-c));
}

int main(){
    while(cin>>ax>>ay>>bx>>by>>cx>>cy){

        lenab = dis(ax,ay,bx,by);
        lenbc = dis(bx,by,cx,cy);
        lenca = dis(cx,cy,ax,ay);

        cin>>ab;
        for(int i=1;i<=ab;i++){
            scanf("%d",dista+i);
        }
        cin>>bc;
        for(int i=1;i<=bc;i++){
            scanf("%d",distb+i);
        }
        cin>>ca;
        for(int i=1;i<=ca;i++){
            scanf("%d",distc+i);
        }
        sort(dista+1,dista+1+ab);
        sort(distb+1,distb+1+bc);
        sort(distc+1,distc+1+ca);

        a1x = (ax - bx)*(lenab - dista[1])/(lenab) + bx;
        a1y = (ay - by)*(lenab - dista[1])/(lenab) + by;

        b1x = (ax - bx)*(lenab - dista[ab])/lenab + bx;
        b1y = (ay - by)*(lenab - dista[ab])/lenab + by;

        b2x = (cx - bx)*(distb[1])/lenbc + bx;
        b2y = (cy - by)*(distb[1])/lenbc + by;

        c1x = (cx - bx)*(distb[bc])/lenbc + bx;
        c1y = (cy - by)*(distb[bc])/lenbc + by;

        c2x = (cx - ax)*(lenca - distc[1])/lenca + ax;
        c2y = (cy - ay)*(lenca - distc[1])/lenca + ay;

        a2x = (cx - ax)*(lenca - distc[ca])/lenca + ax;
        a2y = (cy - ay)*(lenca - distc[ca])/lenca + ay;

        double ans = 0;

        ans = max(ans , mj(a1x,a1y,b1x,b1y,c1x,c1y));

        ans = max(ans , mj(a2x,a2y,b1x,b1y,c1x,c1y));

        ans = max(ans , mj(a1x,a1y,b2x,b2y,c1x,c1y));

        ans = max(ans , mj(a1x,a1y,b1x,b1y,c2x,c2y));

        ans = max(ans , mj(a2x,a2y,b1x,b1y,c2x,c2y));

        ans = max(ans , mj(a1x,a1y,b2x,b2y,c2x,c2y));

        ans = max(ans , mj(a2x,a2y,b2x,b2y,c1x,c1y));

        ans = max(ans , mj(a2x,a2y, b2x,b2y, c2x,c2y));

        printf("%.10f",ans);
    }
    return 0;
}

C - Candy division

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
    int T;
    LL n;
    cin >> T;
    while(T--){
        cin >> n;
        if(n % 3 == 0){
            LL t = n / 3;
            cout << t << " " << t << " " << t << endl;
        }else if(n % 4 == 0){
            cout << (n >> 1) << " " << (n >> 2) << " " << (n >> 2) << endl;
        }else cout << "IMPOSSIBLE" << endl;
    }

    return 0;
}

D - Effective network

#include<bits/stdc++.h>
using namespace std;
int head[10010],cnt=0,maxlen,vis[10010],n,m,k;
struct e{
    int next,to;
}edge[100010];
void add(int a,int b)
{
    edge[++cnt].to=b;
    edge[cnt].next=head[a];
    head[a]=cnt;
}
bool bfs(int x)
{
    bool vis[10000]={0};
    queue<pair<int,int> > q;
    q.push(make_pair(x,0));
    vis[x]=1;
    while(!q.empty())
    {
        int u=q.front().first,step=q.front().second;
        q.pop();
        maxlen=max(step,maxlen);
        for(int i=head[u];i!=-1;i=edge[i].next)
        {
            int v=edge[i].to;
            if(!vis[v]){q.push(make_pair(v,step+1));vis[v]=1;}
        }
    }
}
int main()
{
    memset(head,-1,sizeof(head));
    cin>>n>>m>>k;
    for(int i=0;i<m;i++)
    {
        int a,b;
        scanf("%d %d",&a,&b);
        add(a,b);
        add(b,a);
    }
    for(int i=1;i<=n;i++)
    {
        bfs(i);
    }
    if(maxlen<=n-k)
    {
        printf("%d\n",n);
        for(int i=1;i<=n;i++) printf("%d ",i);
    }
    else printf("0\n");
}

E - Collection

#include <bits/stdc++.h>
using namespace std;

template<class T>
inline void read(T &ret){
    char c;
    int sign=1;
    while(c=getchar(),c!=‘-‘&&(c>‘9‘||c<‘0‘));
    if(c==‘-‘)sign=-1;
    else ret = c-‘0‘;
    while(c=getchar(),c>=‘0‘&&c<=‘9‘){
        ret = ret*10 + c-‘0‘;
    }
    ret*=sign;
}

int main(){
    int n;set<int> st;
    while(cin>>n){
        st.clear();
        int ans=0;
        for(int i=0;i<n;i++){
            int a;scanf("%d",&a);
            if(st.count(a))ans++;
            st.insert(a);
        }cout<<ans<<endl;
    }
    return 0;
}

F - Mattress Run

J - Box Hedge

#include<bits/stdc++.h>
using namespace std;
int n,cnt=0,prelt[1001000],prert[1001000];
long long cir=0,sz=0,area=0;
struct row{
    int lt,rt,h;
}r[1001000];
struct point{
    int x,y;
}p[1001000];
bool cmp(point a,point b)
{
    return a.y<b.y;
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++)
    {
        scanf("%d %d",&p[i].x,&p[i].y);
        p[i].y++;
    }
    sort(p,p+n,cmp);
    r[0].lt=r[0].rt=p[0].x;
    r[0].h=p[0].y;
    for(int i=1;i<n;i++)
    {
        if(r[cnt].h==p[i].y)
        {
            r[cnt].lt=min(r[cnt].lt,p[i].x);
            r[cnt].rt=max(r[cnt].rt,p[i].x);
        }
        else
        {
            cnt++;
            r[cnt].lt=r[cnt].rt=p[i].x;
            r[cnt].h=p[i].y;
        }
    }
    prelt[cnt]=r[cnt].lt;
    prert[cnt]=r[cnt].rt;
    for(int i=cnt-1;i>=0;i--) prelt[i]=min(prelt[i+1],r[i].lt);
    for(int i=cnt-1;i>=0;i--) prert[i]=max(prert[i+1],r[i].rt);
    area=1LL*(prert[0]-prelt[0]+1)*r[0].h;
    for(int i=1;i<=cnt;i++)
    {
        area=area+1LL*(prert[i]-prelt[i]+1)*(r[i].h-r[i-1].h);
    }
    sz=2LL*r[0].h;
    for(int i=1;i<=cnt;i++)
    {
        sz=sz+2LL*(r[i].h-r[i-1].h)+abs(prelt[i]-prelt[i-1])+abs(prert[i]-prert[i-1]);
    }
    sz+=((prert[cnt]-prelt[cnt]+3));
    cir=1LL*(prert[0]-prelt[0]+3)+2LL*(r[cnt].h+1);
    cout<<cir<<" "<<sz<<" "<<area<<endl;
    return 0;
}

K - ACM

#include <bits/stdc++.h>
using namespace std;

template<class T>
inline void read(T &ret){
    char c;
    int sign=1;
    while(c=getchar(),c!=‘-‘&&(c>‘9‘||c<‘0‘));
    if(c==‘-‘)sign=-1;
    else ret = c-‘0‘;
    while(c=getchar(),c>=‘0‘&&c<=‘9‘){
        ret = ret*10 + c-‘0‘;
    }
    ret*=sign;
}

int main(){
    string s;
    while(cin>>s){
        if(s.find("ACM")!=string::npos){
            puts("Fun!");
        } else puts("boring...");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/dowhile0/p/9190138.html

时间: 2024-08-07 05:55:05

ACM-ICPC-Swiss-Subregional 2017 训练日志的相关文章

hdu6206 Apple 2017 ACM/ICPC Asia Regional Qingdao Online

地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6206 题目: Apple Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 530    Accepted Submission(s): 172 Problem Description Apple is Taotao's favouri

ACM/ICPC算法训练 之 数学很重要-浅谈“排列计数” (DP题-POJ1037)

这一题是最近在看Coursera的<算法与设计>的公开课时看到的一道较难的DP例题,之所以写下来,一方面是因为DP的状态我想了很久才想明白,所以借此记录,另一方面是看到这一题有运用到 排列计数 的方法,虽然排列计数的思路简单,但却是算法中一个数学优化的点睛之笔. Poj1037  A decorative fence 题意:有K组数据(1~100),每组数据给出总木棒数N(1~20)和一个排列数C(64位整型范围内),N个木棒长度各异,按照以下条件排列,并将所有可能结果进行字典序排序 1.每一

2017 ACM/ICPC Asia Regional Shenyang Online spfa+最长路

transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total Submission(s): 1496    Accepted Submission(s): 723 Problem Description Kelukin is a businessman. Every day, he travels arou

《ACM/ICPC 算法训练教程》读书笔记一之数据结构(堆)

书籍简评:<ACM/ICPC 算法训练教程>这本书是余立功主编的,代码来自南京理工大学ACM集训队代码库,所以小编看过之后发现确实很实用,适合集训的时候刷题啊~~,当时是听了集训队final的意见买的,感觉还是不错滴. 相对于其他ACM书籍来说,当然如书名所言,这是一本算法训练书,有着大量的算法实战题目和代码,尽管小编还是发现了些许错误= =,有部分注释的语序习惯也有点不太合我的胃口.实战题目较多是比较水的题,但也正因此才能帮助不少新手入门,个人认为还是一本不错的算法书,当然自学还是需要下不少

【转】ACM/ICPC生涯总结暨退役宣言—alpc55

转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写这篇文章了,但是也很不想去写.毕竟是为之奋斗了两年的目标,不是说舍得就舍得的.然而,自己毕竟是到了该退的时候了,与其扭扭捏捏,不如挥一挥衣袖,尚落得一份潇洒.回首这两年来,有很多是需要总结的.在这里不分巨细的记录下来,或许有点像流水账,但是更多的,是一份对过去的难忘. 童年 我的ACM/ICPC的生

【转】[email&#160;protected]&#183;ACM/ICPC 回忆录

转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC这项赛事是在大三上的算法课上张老师提到的,当时我们学校的组织参加这项活动才刚刚起步,我也没太在意,总觉得那是非常遥远的事,事实上当时我也从未相当如今我们能获得现在的成绩.真正踏入ACM/ICPC这个神奇的世界,不得不提到2004那一年我们学校的参赛队伍xmutank,正是听了pipo师兄的精彩演讲以

2014 ACM/ICPC Asia Regional Guangzhou Online Wang Xifeng&#39;s Little Plot HDU5024

一道好枚举+模拟题目.转换思维视角 这道题是我做的,规模不大N<=100,以为正常DFS搜索,于是傻乎乎的写了起来.各种条件限制模拟过程 但仔细一分析发现对每个点进行全部八个方向的遍历100X100X100^8 .100X100个点,每个点在走的时候8中选择,TLE 于是改为另一个角度: 以符合要求的点为拐弯点,朝两个垂直的方向走,求出最远的距离.这样只要对每个点各个方向的长度知道,组合一下对应的就OK. 避免了每个点深搜. PS:搜索的时候x,y写反了,导致构图出现问题,以后用[dy][dx]

HDU 5014 Number Sequence(2014 ACM/ICPC Asia Regional Xi&#39;an Online) 题解

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5014 Number Sequence Problem Description There is a special number sequence which has n+1 integers. For each number in sequence, we have two rules: ● ai ∈ [0,n] ● ai ≠ aj( i ≠ j ) For sequence a and sequ

ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L

这套题是我上周日, 就是前天打得一场组队赛, 题目不太好找 题目链接:http://codeforces.com/gym/100861 在virtual judge 上也可以提交哦! A ACM ICPC Rules: 题目大意: 有很多所高校参加预选赛, 并在预选赛取得了排名, 但是对于每所学校, 除了MSU有4个名额之外其他大学只有两个名额( 也就是说, 只有每个大学的前2名进决赛(MSU前四名)&& 最多有10个队伍进入决赛), 高中队伍不能进入决赛. 给出预选赛的排名, 输出可以进