Codeforces Round #529 (Div. 3)

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

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

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

查看所有标签

猜你喜欢:

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

Charlotte's Web

Charlotte's Web

E. B. White / Puffin Classics / 2010-6-3 / GBP 6.99

This is the story of a little girl named Fern who loved a little pig named Wilbur and of Wilbur's dear friend, Charlotte A. Cavatica, a beautiful large grey spider. With the unlikely help of Templeton......一起来看看 《Charlotte's Web》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具