Codeforces Round #472 A-D

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

A. Tritonic Iridescence

题目链接:点击打开链接

题意:使用CMY对字符串进行填充,要求相邻的两个不能相同,如果有两种以上可行填充方法就输出“YES”否则输出“NO”。

思路:对每一个问号进行判定,最后的结果就是所有问号的可行方案数的乘积,当然可能会超出数据范围,因此只要大于2不再变大。此外, 还要判断是否有连续两个相同。

AC代码:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <string>
#include <vector>
#include <set>

using namespace std;

#define FSIO  ios::sync_with_stdio(0);cin.tie(0);
#define DEBUG(a)   cout<<"DEBUG: "<<(a)<<endl;

const int MAXN = 105;
const int MOD = 1e9+7;
const int INF = 1e9+7;

char str[MAXN];
set<char> gg;
int n;

int main()
{
    //FSIO;
    while(cin>>n)
    {
        scanf(" %s",str+1);
        int flag = 0;
        int res = 0;
        for(int i=1;i<=n;++i)
        {
            if(str[i]=='?')
            {
                if(!res)    res=1;
                gg.clear();
                if(i>1&&str[i-1]!='?') gg.insert(str[i-1]);
                if(i<n&&str[i+1]!='?') gg.insert(str[i+1]);
                if(res>=2)  res = 3;
                else    res = res*(3-gg.size());
            }
            else if(i<n&&str[i]==str[i+1])   {flag=1; break;}
        }
        if(!flag&&res>=2) cout<<"Yes"<<endl;
        else    cout<<"No"<<endl;
    }
    return 0;
}



B. Mystical Mosaic

题目链接:点击打开链接

题意:给定一种操作,即对于某非空的正整数集合的集合R,C,对于R_i和C_i,填充网格中R_i行与C_i列相交点为黑色,且R和C中任意两集合互斥。对于某网格,如能从空白网格经这样的操作变成该网格则输出“Yes”,否则输出“No”。

思路:因为每一个点都要进行判定,不妨从左上角开始扫描,对于存在黑格的行进行扫描,取其中的所有为黑格的对应列,再对所有列往下逐行扫描,若这些列在某行存在黑格,则所有列都必须有才行。之后标记已经扫描过的行列以及格子,只要遇到已经标记的行列就不行,否则则行。

AC代码:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <string>
#include <vector>
#include <set>

using namespace std;

#define FSIO  ios::sync_with_stdio(0);cin.tie(0);
#define DEBUG(a)   cout<<"DEBUG: "<<(a)<<endl;

const int MAXN = 55;
const int MOD = 1e9+7;
const int INF = 1e9+7;

char mapp[MAXN][MAXN];
int mkr[MAXN];
int mkc[MAXN];


int n, m;
int cntblack;

int walk(int x, int y)
{
    vector<int> tmpp;
    for(int t=y; t<=m; ++t)
        if(mapp[x][t]=='#')
        {
            if(!mkc[t])
            {
                mkc[t] = 1;
                mapp[x][t]='.';
                cntblack--;
                tmpp.push_back(t);
            }
            else    return 0;
        }


    vector<int> tomark;

    for(int j=x+1; j<=n; ++j)
    {
        int cnt = 0;
        for(int i=0;i<tmpp.size();++i)
        {
            if(mapp[j][tmpp[i]]=='#')
            {
                cnt++;
                if(!mkr[j])
                {
                    tomark.push_back(j);
                    mapp[j][tmpp[i]]='.';
                    cntblack--;
                }
                else    return 0;
            }
        }
        if(cnt&&cnt!=tmpp.size())    return 0;
    }
    for(int i=0; i<tomark.size(); ++i)
        mkr[tomark[i]] = 1;
    return 1;
}

int solve()
{
    memset(mkr,0,sizeof(mkr));
    memset(mkc,0,sizeof(mkc));
    for(int i=1; i<=n; ++i)
    {
        for(int j=1; j<=m; ++j)
        {
            if(mapp[i][j]=='#')
            {
                if(!mkr[i]&&!mkc[j])
                {
                    if(!walk(i,j))     return 0;
                }
                else    return 0;
                /*cout<<endl;
                for(int mi=1;mi<=n;++mi)
                {
                    for(int mj=1;mj<=m;++mj)
                        cout<<mapp[mi][mj];
                    cout<<endl;
                }*/
            }
        }
    }
    return 1;
}

int main()
{
    FSIO;
    while(cin>>n>>m)
    {
        cntblack = 0;
        for(int i=1; i<=n; ++i)
            for(int j=1; j<=m; ++j)
            {
                cin>>mapp[i][j];
                if(mapp[i][j]=='#')
                    cntblack++;
            }
        if(solve()&&cntblack==0) cout<<"Yes"<<endl;
        else    cout<<"No"<<endl;
    }
    return 0;
}



C. Three-level Laser

题目链接:点击打开链接

题意:在含n个数字的升序序列E中,依次选择三个下标i,j,k,使得i<j<k,且E_i + U<=E_k,输出最大的(E_k - E_j) / (E_k - E_i)。

思路:对于某个E_i来说,要使得该商最大,j肯定为i+1,而k肯定是满足要求的最大下标。所以对序列E进行一次扫描判断每个i的最大对应k即可。最后遍历一遍E求最大该商。

AC代码如下:

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <string>
#include <vector>
#include <set>

using namespace std;

#define FSIO  ios::sync_with_stdio(0);cin.tie(0);
#define DEBUG(a)   cout<<"DEBUG: "<<(a)<<endl;

const int MAXN = 100005;
const int MOD = 1e9+7;
const int INF = 1e9+7;

int n, U;
int engery[MAXN];
int matters[MAXN];

int main()
{
    //FSIO;
    while(scanf("%d%d",&n,&U)!=EOF)
    {
        for(int i=1;i<=n;++i)   scanf("%d",engery+i);
        double ans = -1;
        int cur = 1;
        memset(matters,-1,sizeof(matters));
        for(int i=1;i<=n;++i)
        {
            while(engery[i]-U>engery[cur]&&cur<=n)
            {
                matters[cur] = i-1;
                cur++;
            }
        }
        for(;cur<=n;++cur)  matters[cur] = n;
        /*for(int i=1;i<=n;++i)
            cout<<matters[i]<<" ";
        cout<<endl;*/
        for(int i=1;i+2<=n;++i)
        {
            if(matters[i]>i+1)
            {
                ans = max(ans, (double)(engery[matters[i]]-engery[i+1])/(double)(engery[matters[i]]-engery[i]));
            }
        }
        printf("%.10f\n",ans);
    }
    return 0;
}


D. Riverside Curio

题目链接:点击打开链接

题意:主角每天对河流水位进行标记,相同水位不重复标记。给定每天的在河流水位上的标记数,求最小的所有天的河流水位下的标记数之和。

思路:对于某天来说,水位下的标记数 = 总的标记数 - 1 - 河流水位上的标记数。

所以,只需要求最小的每天的标记数即可。而对于某天在水位上的标记数来说,总的标记数的最小值即该数 + 1,而相邻两天的标记总数最多加一个。所以只需按照上述规则进行贪心地求每天的最小标记数即可,最后对相邻两天差大于1的进行贪心地处理(即顺次递减)。最后遍历数组求和即可。

AC代码如下:

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <string>
#include <vector>
#include <set>

using namespace std;

#define FSIO  ios::sync_with_stdio(0);cin.tie(0);
#define DEBUG(a)   cout<<"DEBUG: "<<(a)<<endl;

const int MAXN = 100005;
const int MOD = 1e9+7;
const int INF = 1e9+7;

long long level[MAXN];
long long minlevel[MAXN];
long long n;

int main()
{
    FSIO;
    while(cin>>n)
    {
        for(long long i=1;i<=n;++i)
            cin>>level[i];
        minlevel[1] = 1;
        for(long long i=2;i<=n;++i)
        {
            if(minlevel[i-1]-1>=level[i])   minlevel[i] = minlevel[i-1];
            else
            {
                long long tmp = 1;
                while(minlevel[i-1]-1+tmp<level[i]) tmp++;
                minlevel[i] = minlevel[i-1]+tmp;
                for(long long j=0;j<tmp;++j)
                    minlevel[i-j] = minlevel[i]-j;
            }
        }
        for(int i=n;i>1;--i)
        {
            if(minlevel[i]-minlevel[i-1]>1)
                minlevel[i-1] = minlevel[i]-1;
        }
        /*for(long long i=1;i<=n;++i)
            cout<<minlevel[i]<<" ";
        cout<<endl;*/
        long long ans = 0;
        for(long long i=1;i<=n;++i)
            ans = ans + (minlevel[i]-1-level[i]);
        cout<<ans<<endl;
    }
    return 0;
}

Orion-Ops:一站式运维平台的设计、部署与实战指南 在软件开发和系统运维领域,自动化与效率提升是核心诉求。其基本原理在于通过工具和平台将重复、繁琐的手动操作转化为可重复、可追溯的自动化流程,从而降低人为错误、提升响应速度。这一技术价值在DevOps实践中尤为凸显,它强调开发与运维的协作与自动化。具体到应用场景,中小团队常面临服务器管理、批量命令执行、应用部署等高频需求,但维护Ansible、Rundeck等全套企业级工具链成本较高。因此,轻量级、开箱即用的集成运维平台成为更务实的选择。本文深入解析的Orion-Ops项目,正是这样一个聚焦于**批量操作**和 阅读详情

相关推荐

便携式水下动态实时视频色彩还原设备,一键快速实现对水下偏色视频和图像的色彩还原处理

便携式水下动态实时视频色彩还原,一键快速对水下图像进行色彩校正,清晰度提升和亮度均衡处理,为水下资源勘探和科学考古,海洋生态环境监测,水下机器作业等应用提供有力的协助

weixin_43518680的博客 617

Codeforces Round #472 (Div. 1)

Contests 链接:Codeforces Round #472 (Div. 1) 过题数:3 排名:253/1066 A. Mystical Mosaic 题意 最初有一个 n×mn×mn\times m 的网格,每个方格的颜色最初都是白色的,每次操作可以选择一些行与一些列,将这些行和列的交点上的方格都涂上黑色,每一个行与列在所有操作中只能被选择一次,给定最终的网格,问能否...

Dmaxiya 413

QT实现警报应用程序

QT实现警报应用程序

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1991

codeforces #472(div 1)

B(two point) 题意:   给出长度为n的非递减数组E[1..n],对于所有三元组(i,j,k),1<=i<j<k<=n且Ek-Ei<=U,我们需要计算出最大的(Ek-Ej)/(Ek-Ei)   n<=1e5 分析:   考虑枚举i和k,那么j一定是i+1   容易发现k越靠右值越大,所以k是满足Ek-Ei<=U的最大的k   于是...

weixin_30867015的博客 179

Codeforces 924A Mystical Mosaic(瞎搞)

题目链接:Mystical Mosaic 题意 最初有一个 n×mn×mn\times m 的网格,每个方格的颜色最初都是白色的,每次操作可以选择一些行与一些列,将这些行和列的交点上的方格都涂上黑色,每一个行与列在所有操作中只能被选择一次,给定最终的网格,问能否通过有限次合法的操作得到最终网格。 输入 第一行包括两个整数 n,m&amp;nbsp;(1≤n,m≤50)n,m&amp;nb...

Dmaxiya 482

最小生成树(kruskal)Codeforces 472D

D. Design Tutorial: Inverse the Problem There is an easy way to obtain a new task from an old one called "Inverse the problem": we give an output of the original task, and ask to generate an in

龙崎的专栏 1128

Codeforces Round #472 (rated, Div. 2, based on VK Cup 2018 Round 2)

cf472.d2/* A: 题意:有三种类型的字符C,Y,M,现在给你一串含有C,Y,M,?的字符串, 在?处填上C或Y或M,使得相邻的字符不相同,如果填的方式大于等 于2,输出Yes,否则输出No; 思路:如果含有两个或两个以上的连续问号则必定有两种以上的填法 如果只有一个问号,这个问号在第一位或者最后一位也有两种填法, 或者这个问号的两边的字母相同时,也有两种填法;即只有一个?并 且?两边的...

whiskey_wei的博客 224

Codeforces Round #472(Div 2)

这场打得十分之烂,赛场上只PP了AB,而且最后还FST了一题捂脸……愉快掉分QAQ。。。 A题一开始我码了个搜索,结果忘记特判QAQ…… B题码完后交了一发,然而由于比赛时提交太多CF挂掉,在很久之后我才知道WA了,于是又改了一下才过。 接着窝便去刚C题,由于没看清题目有个Ek−EI<=UE_k-E_I<=U的限制,给的式子窝看到j=i+1后就直接上了,求Ek−Ei+1Ek−Ei\frac{E

Moon1125666900的博客 268

Codeforces Round #270 Codeforces Round #270

D. Design Tutorial: Inverse the Problem time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output There is an easy wa

redcp的专栏 459

Codeforces Round #270 D. Design Tutorial: Inverse the Problem

题意:给一个n*n的矩阵,判断它是否是一个带权树的边权矩阵。 算法:

虽然冲动永远比坚持容易~ 750

【推导】Codeforces Round #472 (rated, Div. 2, based on VK Cup 2018 Round 2) B. Mystical Mosaic

题意:给你一个棋盘的最终局面。 你的一次操作可以选择一些行和列,将它们的交叉点染黑,不能重复选择某行或者某列。问你是否能经过数次操作之后,达到目标局面。 就枚举所有黑点,如果该点行列都没被标记,就给它的行列新建一次操作的序号;否则如果只有行有操作标号,就把它付给列操作标号;对列亦然。 然后模拟一遍,看看结果是否和题目所给相同。 #include<cstdio> #i...

weixin_34054931的博客 121

【推导】【贪心】Codeforces Round #472 (rated, Div. 2, based on VK Cup 2018 Round 2) D. Riverside Curio...

题意:海平面每天高度会变化,一个人会在每天海平面的位置刻下一道痕迹(如果当前位置没有已经刻划过的痕迹),并且记录下当天比海平面高的痕迹有多少条,记为a[i]。让你最小化每天比海平面低的痕迹条数之和。 贪心,使得痕迹条数尽可能小。 考虑处理出每天痕迹条数的数组f[i]的最小可能值。 满足几个约束即可,f[i]>=f[i-1],f[i]>=a[i]+1,f[i]>=f[i+1]...

weixin_33698823的博客 118

Codeforces Round #226 div2(待更新)

A题 代码: #include #include #include #include #include #include using namespace std; int a[105]; int main() { int n,m,i; while(cin>>n>>m) { for(i=1;i<=n;i++) cin>>a[i]

布生气 1356

Codeforces Round #382 (Div. 2) -- D. Taxes (数学 -- 哥德巴赫猜想, 唯一分解定理)

大体题意: 你有n元钱,你需要交税,交锐的价格为n 的最大因子(不等于n),为了缩小税钱,你可以拆成多个钱相加的形式,但是不能拆出1来,问你最少交多少钱? 思路: 肯定是全都是素数最好了,那么问题就是把n 拆成多个素数之和的形式! 根据哥德巴赫猜想,任何大于2 的偶数必定写成两个质数相加的形式! 因为我们判断  如果n 本身时素数直接输出1 如果不是素数, 是偶数的话,直接输出2 如

aozil_yang的博客 1059

CodeForces-472A

import java.util.Scanner; //题意:将一个数拆为两个合数之和 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); //偶数拆分为4和n-4 .

qq_53324833的博客 156

Codeforces Round#472

CF957A Tritonic Iridescence(瞎搞) CF924A Mystical Mosaic(瞎搞) CF924B Three-level Laser(贪心) CF924C Riverside Curio(贪心) CF924D Contact ATC(数学+BIT求逆序对)

Icefox的博客 1434

codeForces 472D 最小生成树

题目大意:给出一个图中点的两两距离,问是否是一棵树,若是,求出平均边权最大的点 prim最小生成树,若原图是树,则最小生成树的距离就是原距离。否则不是。 搞出来树了,第二问随便dfs就好了。 #include<cstdio> #include<cstring> #include<iostream> #include&...

aida9573的博客 196

Codeforces Round #472 B. Mystical Mosaic

B. Mystical Mosaic There is a rectangular grid of n rows of m initially-white cells each.Arkady performed a certain number (possibly zero) of operations on it. In the i-th operation, a non-empty subse

lwlldd的专栏 380

CodeForces 472 D ,E,F (MST,构造,线性代数)(待补)

官方题解:http://codeforces.com/blog/entry/14028 E题:http://codeforces.com/contest/472/problem/E F题:http://codeforces.com/contest/472/problem/FThere is an easy way to obtain a new task from an old one call

now_ing的博客 522

Codeforces 472D

看官方题解提供的是最小生成树,怎么也想不明白,you can guess and prove it! 看了好几个人的代码,感觉实现思路全都不一样,不得不佩服cf题目想法的多样性 下面说说我自己的理解,将1作为根,对于任意两点存在两种关系: 1.一个点位于另一个点的子树上。两点到1的距离之差绝对值等于两点距离。 2.两个点在某一个点的不同子树上。两点到1距离之和减去两点距离等于两倍某个点到1

无名山丘,崛起成峰 2412
上一篇: Codeforces Round #470 D Picking Strings
下一篇: Codeforces Round #297 (Div. 2) 纪念第一次Div2 AK
LFhase
博客等级 码龄10年 9粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值