Codeforces Round #529 (Div. 3)

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

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

比赛链接: 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)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

程序员成长的烦恼

程序员成长的烦恼

吴亮、周金桥、李春雷、周礼 / 华中科技大学出版社 / 2011-4 / 28.00元

还在犹豫该不该转行学编程?还在编程的道路上摸爬滚打?在追寻梦想的道路上你并不孤单,《程序员成长的烦恼》中的四位“草根”程序员也曾有过类似的困惑。看看油田焊接技术员出身的周金桥是如何成功转行当上程序员的,做过钳工、当过外贸跟单员的李春雷是如何自学编程的,打小在486计算机上学习编程的吴亮是如何一路坚持下来的,工作中屡屡受挫、频繁跳槽的周礼是如何找到出路的。 《程序员成长的烦恼》记录了他们一步一......一起来看看 《程序员成长的烦恼》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具