Codeforces Round #529 (Div. 3)

栏目: 编程工具 · 发布时间: 7年前

内容简介:比赛链接:一遍,后取删去最小值或删去最大值结果的最小值。比赛时做出了却没做出这道。。

比赛链接: http://codeforces.com/contest/1095

A. Repeating Cipher

#include <cstdio>
#include <cstring>
#include <cctype> 
#include <iostream>
using namespace std;
int n,cnt;
char s[101];
int main()
{
    scanf("%d",&n);
    scanf("%s",s);
    if(n==1) return 0&printf("%s\n",s);
    for(int i=0;i+cnt<=n;i+=cnt)
    {
        cnt++;
        printf("%c",s[i]);
    }
    return 0;
}

B. Array Stabilization

一遍,后取删去最小值或删去最大值结果的最小值。

#include <cstdio>
#include <cstring>
#include <cctype> 
#include <iostream>
#include <algorithm>
using namespace std;
int n,a[100050];
inline int read()
{
    int x=0;bool sign=false;
    char alpha=0;
    while(!isdigit(alpha)) sign|=alpha=='-',alpha=getchar();
    while(isdigit(alpha)) x=(x<<1)+(x<<3)+(alpha^48),alpha=getchar();
    return sign?-x:x; 
}
int main()
{
    n=read();
    if(n==2) return 0&printf("0\n");
    for(int i=1;i<=n;i++) a[i]=read();
    sort(a+1,a+n+1);
    printf("%d\n",min(a[n-1]-a[1],a[n]-a[2]));
    return 0;
}

C. Powers Of Two

比赛时做出了却没做出这道。。

先计算出二进制位下的个数,若>,显然结果为。

开个优先队列,上一步计算时同时把满足的(1<<i)加入队列。

然后不断分解队列中的值,同时入队个,因为。

若还没分成个已经为,显然结果为。

比赛不会写。。躺在床上突然想出来了。。

#include <cstdio>
#include <cctype>
#include <cstring>
#include <iostream>
#include <queue>
#include <vector> 
#include <algorithm>
static const int lim=30;
using namespace std;
priority_queue<int,vector<int>,less<int> > q;
vector<int> vec;
int n,k;
int main()
{
    scanf("%d %d",&n,&k);
    for(int i=lim;i>=0;i--) if((1<<i)&n) q.push((1<<i));
    if((int)q.size()>k) return 0&printf("NO\n");
    while(q.size()!=k)
    {
        if(q.top()==1&&q.size()!=k) return 0&printf("NO\n");
        else
        {
            int t=q.top();
            q.pop();
            q.push(t/2);q.push(t/2);
        }
    }
    printf("YES\n");
    while(!q.empty()) vec.push_back(q.top()),q.pop();
    sort(vec.begin(),vec.end());
    for(vector<int>::iterator it=vec.begin();it!=vec.end();it++) printf("%d ",*it);
    return 0;
}

D. Circular Dance

怒搞了一遍。

因为每个点就个孩子,所以依次枚举。

对于每个节点,若第一个孩子出现在了第二个孩子的孩子队列中,则说明在前,在后,入队,记录末尾元素,直到。

#include <cstdio>
#include <cctype>
#include <cstring>
#include <cstring>
#include <vector>
#include <algorithm>
static const int MAXN=200050;
using namespace std;
int n,x,y;
bool vis[MAXN];
vector<int> vec[MAXN];
vector<int> res;
inline int read()
{
    int x=0;bool sign=false;
    char alpha=0;
    while(!isdigit(alpha)) sign|=alpha=='-',alpha=getchar();
    while(isdigit(alpha)) x=(x<<1)+(x<<3)+(alpha^48),alpha=getchar();
    return sign?-x:x; 
}
int main()
{
    n=read();
    for(int i=1;i<=n;i++)
    {
        x=read();y=read();
        vec[i].push_back(x);
        vec[i].push_back(y);
    }
    int i=1;
    while(res.size()!=n)
    {
        vector<int>::iterator s=find(vec[vec[i][0]].begin(),vec[vec[i][0]].end(),vec[i][1]);
        if(s==vec[vec[i][0]].end())
        {
            if(!vis[vec[i][1]]) res.push_back(vec[i][1]),vis[vec[i][1]]=true;
            if(!vis[vec[i][0]]) res.push_back(vec[i][0]),vis[vec[i][0]]=true;
            i=vec[i][1];
        }
        else
        {
            if(!vis[vec[i][0]]) res.push_back(vec[i][0]),vis[vec[i][0]]=true;
            if(!vis[vec[i][1]]) res.push_back(vec[i][1]),vis[vec[i][1]]=true;
            i=vec[i][0];
        }
    }
    for(vector<int>::iterator it=res.begin();it!=res.end();it++) printf("%d ",*it);
    return 0;
}

以上所述就是小编给大家介绍的《Codeforces Round #529 (Div. 3)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

HTML5与CSS3基础教程(第8版)

HTML5与CSS3基础教程(第8版)

[美] Elizabeth Castro、[美] Bruce Hyslop / 望以文 / 人民邮电出版社 / 2014-5 / 69.00元

本书是风靡全球的HTML和CSS入门教程的最新版,至第6版累积销量已超过100万册,被翻译为十多种语言,长期雄踞亚马逊书店计算机图书排行榜榜首。 第8版秉承作者直观透彻、循序渐进、基础知识与案例实践紧密结合的讲授特色,采用独特的双栏图文并排方式,手把手指导读者从零开始轻松入门。相较第7版,全书2/3以上的内容进行了更新,全面反映了HTML5和CSS3的最新特色,细致阐述了响应式Web设计与移......一起来看看 《HTML5与CSS3基础教程(第8版)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换