Educational Codeforces Round 47(Div 2)(A~D)

比赛链接

A.Game Shopping

这种题真是。。打开网页1min 读题3min 思考0min 写代码0.5min。。

#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=1e3+5;

int n,m,cost[N],A[N];

inline int read()
{
    register int now=0;register char c=gc();
    for(;!isdigit(c);c=gc());
    for(;isdigit(c);now=now*10+c-'0',c=gc());
    return now;
}

int main()
{
    n=read(), m=read();
    for(int i=1; i<=n; ++i) cost[i]=read();
    for(int i=1; i<=m; ++i) A[i]=read();
    int now=1,ans=0;
    for(int i=1; i<=n && now<=m; ++i)
        if(cost[i]<=A[now]) ++ans, ++now;
    printf("%d\n",ans);

    return 0;
}

B.Minimum Ternary String

#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
const int N=1e5+7;

int n;
char s[N],ans[N];

int main()
{
    scanf("%s",s+1), n=strlen(s+1);
    int cnt[5],now;
    cnt[0]=cnt[1]=cnt[2]=0;
    for(now=1; now<=n; ++now)
        if(s[now]!='2') ++cnt[s[now]-'0'];
        else break;
    for(int i=1; i<=cnt[0]; ++i) ans[i]='0';
    for(int i=cnt[0]+1; i<=cnt[0]+cnt[1]; ++i) ans[i]='1';
    cnt[0]=cnt[1]=cnt[2]=0;
    for(int i=now; i<=n; ++i) ++cnt[s[i]-'0'];
    for(int i=now; i<now+cnt[1]; ++i) ans[i]='1';
    s[n+1]='3';
    for(int i=now+cnt[1]; i<=n; ++i)
    {
        while(s[now]=='1') ++now;
        ans[i]=s[now++];
    }
    puts(ans+1);

    return 0;
}/*
102012012
*/

C.Annoying Present

#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
#define eps 1e-8
typedef long long LL;
const int N=1e5+7;

inline int read()
{
    register int now=0,f=1;register char c=gc();
    for(;!isdigit(c);c=='-'&&(f=-1),c=gc());
    for(;isdigit(c);now=now*10+c-'0',c=gc());
    return now*f;
}

int main()
{
    int n=read(), m=read();
    LL sum=0, sumX=0, C1, C2=1ll*n*(n-1)>>1;//n/2写成n>>1略显乱
    if(n&1) C1=1ll*(n>>1)*((n>>1)+1);
    else C1=1ll*(n>>1)*((n>>1)+1)-1ll*(n>>1);
    LL x,d;
    for(int i=1; i<=m; ++i)
    {
        x=read(), d=read(), sumX+=x;
        if(d>0) sum+=C2*d;
        else if(d<0) sum+=C1*d;
    }
    printf("%.8lf",1.0*(sum+1ll*n*sumX)/n);

    return 0;
}

D.Relatively Prime Graph

靠 欺负我读英文题目不仔细吗 图必须连通。。
于是WA*3。看了数据才A。。
这破题 rank1000+了啊啊啊

而且这题n^2纯暴力都能过 太没意思了吧

#include <cmath>
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
#define pr std::pair<int,int>
#define mp std::make_pair
const int N=1e5+7;

int n,m,cnt,P[N],fac[N],sum;
pr A[3000005];
bool not_P[N];

int gcd(int x,int y){
    return y?gcd(y,x%y):x;
}
void Pre(int n)
{
    for(int i=2; i<=n; ++i)
    {
        if(!not_P[i]) P[++cnt]=i;
        for(int j=1; j<=cnt&&i*P[j]<=n; ++j)
        {
            not_P[i*P[j]]=1;
            if(!(i%P[j])) break;
        }
    }
    for(int i=2; i<=n; ++i)
        if(!not_P[i]) fac[i]=i;
        else{
            for(int j=2; j<=i; ++j)
                if(!(i%j)) {fac[i]=j; break;}
        }
}

int main()
{
    scanf("%d%d",&n,&m);// printf("%d\n",m);
    if(m<n-1) return puts("Impossible"),0;//...
    Pre(n);
    for(int i=2; i<=n && sum<m; ++i) A[++sum]=mp(1,i);
    for(int x=1; x<=cnt && sum<m; ++x)
    {
        int i=P[x];
        for(int j=i+1; j<=n && sum<m; )
        {
            int k=std::min(j+fac[i]-1,n+1);//n+1!
            for(int l=j; l<k && sum<m; ++l) A[++sum]=mp(i,l);
            j=k+1;
        }
    }
    for(int i=4; i<=n && sum<m; ++i)
    {
        if(!not_P[i]) continue;
        for(int j=i+1; j<=n && sum<m; )
        {
            int k=std::min(j+fac[i]-1,n+1);
            for(int l=j; l<k && sum<m; ++l)
                if(gcd(i,l)==1) A[++sum]=mp(i,l);
            j=k+1;
        }
    }
    if(sum<m) puts("Impossible");
    else
    {
        puts("Possible");
        for(int i=1; i<=m; ++i)
            printf("%d %d\n",A[i].first,A[i].second);
    }

    return 0;
}


比赛结束后

原文地址:https://www.cnblogs.com/SovietPower/p/9311498.html

时间: 2024-08-30 14:04:33

Educational Codeforces Round 47(Div 2)(A~D)的相关文章

Educational Codeforces Round 47 (Rated for Div. 2) :E. Intercity Travelling

题目链接:http://codeforces.com/contest/1009/problem/E 解题心得: 一个比较简单的组合数学,还需要找一些规律,自己把方向想得差不多了但是硬是找不到规律,还是看了大佬博客才知道的规律.这个题要预先处理2的n次方,不然快速幂也会TLE. 推荐两个大佬的博客: https://blog.csdn.net/u010746456/article/details/81057082 https://blog.csdn.net/hyp1231/article/deta

Educational Codeforces Round 47 (Rated for Div. 2)G. Allowed Letters 网络流

题意:给你一个字符串,和每个位置可能的字符(没有就可以放任意字符)要求一个排列使得每个位置的字符在可能的字符中,求字典序最小的那个 题解:很容易判断有没有解,建6个点表示从a-f,和源点连边,容量为原串字符出现次数,再建64个点表示给定的位置的每一个状态,和汇点连边,容量为出现次数,如果a-f某个字符在状态中出现过,再把a-f和状态连边,容量inf,但是这只能求可行解,并不是字典序最小, 我们枚举每个位置该放哪个字符(a-f),假设该位置是pos,枚举的字符是x,该位置可能字符的状态是st,现在

Educational Codeforces Round 47 (Rated for Div. 2)F. Dominant Indices 线段树合并

题意:有一棵树,对于每个点求子树中离他深度最多的深度是多少, 题解:线段树合并快如闪电,每个节点开一个权值线段树,递归时合并即可,然后维护区间最多的是哪个权值,到x的深度就是到根的深度减去x到根的深度复杂度O(nlogn) //#pragma comment(linker, "/stack:200000000") //#pragma GCC optimize("Ofast,no-stack-protector") //#pragma GCC target("

Educational Codeforces Round #54 (Div. 2) E. Vasya and a Tree 技巧題

題目連接:http://codeforces.com/contest/1076/problem/E 本題大意: 給一棵根節點為"1"樹,給m個操作,每個操作三個整數,v,d,x,意思是從節點1,往下深度d,遍及的節點的值都加上x,d可能是0,就是只加在自己上.結束m個操作后輸出每個節點的值. 解題思路: 這裡不應該考慮同時操作整棵樹.因為每個節點的子樹是多樣的,而應該以dfs的形式,直接搜到葉子節點,這樣沿途就是一條鏈.每時每刻都在操作一條鏈,也就是一段區間.這樣操作轉化為:一個節點往

Educational Codeforces Round 58 Div. 2 自闭记

明明多个几秒就能场上AK了.自闭. A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long char getc(){char c=getchar();while ((c<'A'

Educational Codeforces Round 47 D

Let's call an undirected graph $G=(V,E)$ relatively prime if and only if for each edge $(v,u)∈E$ $GCD(v,u)=1$ (the greatest common divisor of vv and uu is 11). If there is no edge between some pair of vertices $v$ and $u$ then the value of $GCD(v,u)$

Educational Codeforces Round 80 (Div. 2)

D. Minimax Problem 题意 && 思路 题意: 给出 n 个长度为 m 的序列(1 ≤ n ≤ 3*1e5, 1≤ m ≤8 ),对于序列中的每一个元素 a,(0≤a≤1e9) 现在你要求出,对于所有任意两行序列为一组(或则自己本身成为一组),进行(两个序列的同一个位置取最大值放到新序列中)操作形成新的序列,再从新的序列中选取最小值作为ans,最后要对所有可能组成的ans中输出最大的ans. 思路: 说实话没有想到用二分加二进制压缩表示来求解.二分倒是可以想到,毕竟正向 把

Educational Codeforces Round 85 (Div. 2) 部分题解

A. Level Statistics 题意 一个关卡有玩家的尝试次数和通关次数,按时间顺序给出一个玩家 $n$ 个时刻的数据,判断这些数据是否合理. 思路 通关次数不会多于尝试次数 后一时刻的尝试次数不会少于前一时刻 后一时刻的通关次数不会少于前一时刻 每次增加的通关次数不会多于增加的尝试次数 代码 #include <bits/stdc++.h> using namespace std; void solve() { int n; cin >> n; int p[n], c[n

Educational Codeforces Round 36 (Rated for Div. 2)

Educational Codeforces Round 36 (Rated for Div. 2) F. Imbalance Value of a Tree You are given a tree T consisting of n vertices. A number is written on each vertex; the number written on vertex i is ai. Let's denote the function I(x,?y) as the differ