A. Gift Carpet

每道题都是伸缩代码框有ac代码请不要漏掉

--------------------------题解-----------------------------

按先行便然后列再变循环 设置jud每满足一个条件就让jud++ 只有jud==相应值的时候才让其++

点击查看代码
#include<bits/stdc++.h>
using namespace std;
char a[30][30];
int main()
{
int t;
cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
int jud=0; for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(int j=1;j<=m;j++)
{
for(int i=1;i<=n;i++)
{
if(jud==0&&a[i][j]=='v')
{
jud++;
break;
}
if(jud==1&&a[i][j]=='i')
{
jud++;
break;
}
if(jud==2&&a[i][j]=='k')
{
jud++;
break;
}
if(jud==3&&a[i][j]=='a')
{
jud++;
break;
}
}
}
if(jud==4) cout<<"YES"<<'\n';
else cout<<"NO"<<'\n';
}
}

B. Sequence Game

这题题意比较难理解,总的来说就是B的数列是A中 a[i]>=a[i-1]的数据现在让你根据B数列构造一个可能的A数列出来

--------------------------题解-----------------------------------------

经过长时间观察后我得出,只需要遍历B数列,如果看到一个b[i]<b[i-1]就说明原数列在这个地方不符合a[i]>=a[i-1]的要求,因此我们按照以下方法构造

b[i]>=b[i-1]则照抄b数列,不符合该要求时便多构造一个b[i-1]使他在原数列中符合要求 按照我的方法模拟一遍然后你输出构造的数列你就差不多懂了

可以在根据 (a[i]>=a[i-1]便放进b数列中这个要求检验一下看看是不是原先的B数列)

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=4e5+10;
int a[N];
int b[N];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int cnt=1;
b[1]=a[1];
for(int i=2;i<=n;i++)
{ if(a[i]<a[i-1])
{
cnt++;
b[cnt]= a[i];
}
cnt++;
b[cnt]=a[i];
}
cout<<cnt<<'\n';
for(int i=1;i<=cnt;i++)
{
cout<<b[i]<<" ";
}
cout<<'\n';
}
}

C. Flower City Fence

这题题意更是重量级的难懂,我大概概括一下,先给你一个如图一样排列的阶梯,然后你把这个阶梯按题目要求翻转(大的在下小的在上)然后再把翻转后的台阶看成一个全新的台阶,重新划分第1,2,3...阶梯把他们的高度统计出来,看他们的高度是否与未翻转的台阶相同(结合图理解)

---------------------------------------------------题解-------------------------------------------

首先我们要先记住题目给你的台阶一定是非递增数列也就是a[i+1]<=a[i] 加入有5个台阶 高度为6 6 6 6 6 把他们横过来之后 他们就会变成 5 5 5 5 5 5不符合要求由此我们可以看出每个台阶的高度都会对翻转

后的台阶高度做出一定贡献(也可能不做主要是看他翻转前的高度) 高度为x便可以对翻转后高度1~x的阶梯高度有1的贡献,所以我们可以得出一个结论 如果最大的a[1]>n的时候,该阶梯翻转之后是必然不可能和之前一样

的 比如n=1 a1=6 翻转后会变成 1 1 1 1 1 1.理解这块后就好做了我们枚举每一个点判断翻转后本应该最后对这个点做出贡献的x柱子(由于单调递减只要他做出了贡献他前面的也做出了贡献)有没有做到贡献以及x+1

个柱子是不是没有做到贡献(没有做到就对了) 可能比较难理解,建议反复读题和观看代码

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;
int a[N];
signed main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int jud=0;
for(int i=1;i<=n;i++) cin>>a[i];![](https://img2024.cnblogs.com/blog/3418807/202407/3418807-20240701085937602-1590934993.png) if(a[1]>n) jud=1;
a[n+1]=0;a[0]=0;
if(jud==0){//这个if也要注意不然会数组越界,此题有更简单和暴力的办法,但我赛中只想到了这个
for(int i=1;i<=n;i++)
{
if(a[a[i]]<i||a[a[i]+1]>=i) jud=1;//判断翻转后该位置柱子是否准确的被翻转前的柱子做到了贡献
}
}
if(jud==1) cout<<"NO"<<'\n';
else cout<<"YES"<<'\n';
}
}

D. Ice Cream Balls

我不擅长的数学题,但总体难度不难主要考察二分,能看到这里的想必都是高手了,我会说的简单一点主要,分享一下我的推导思路

--------------------------------题解--------------------------------------

由题意我们知道这里面有一个数论原理,我简单解释一下,比如我们要凑出6种双球(以下统称sq单球统称dq),答案是 4

我们这么看第一个球可以和第2 3 4 个凑

第二个可以和3 4个凑

第三个可以和第4个凑

第4个没得凑

我们便可以列出这样的公式

x-1

+

x-2

+

x-3

+

x-4

=n

此时x为4 n=6便是正确答案

把这几个公式加起来可以简化成x*(x-1)/2==n

我们利用这个公式便可以进行二分

这是这题的第一个关键点

题目中说了需要正好能凑出n种双球我们拿n=179举例 这个样例你按照我的公式二分之后 l=19,我们是二分出来按照公式后得出来的最大但是绝对不超过n的一个数字便是19

然后19能正好凑出171种 但题目问的是需要几个球,因此可以买重复的凑成类似(1,1)(2,2)的sq 所以我们要在19的基础上再重复买(179-171)种球 19+8加起来便是27个与题目一答案一样

二分出来的并不是直接答案

这是第二个关键点

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
ll check(ll q)
{
//if(q*q-((1+q)*(q/2))==n) return 3;
if(q*(q-1)/2>n) return 1;
else return 0; }
int main()
{
ll t;
cin>>t;
while(t--)
{ cin>>n;
if(n==1) cout<<2<<endl;
else{ // x*x-1+x=n
ll l=1,r=3e9;
while(l<r)
{ // cout<<l<<endl;
ll mid=(l+r+1)/2;
// cout<<mid<<endl;
if(check(mid)==0) l=mid;
else r=mid-1;
} // cout<<l<<'\n';
ll sum=0;
sum=l*(l-1)/2; //cout<<sum<<endl;
//sum=sum-(l-1);
cout<<l+(n-sum)<<'\n'; } }
}

E. Kolya and Movie Theatre

能看到这里的也是高手了,我就不赘述了,说得简单一点,这道题赛中时间不够了不然我就上大分了

这题总体不难主要考察数据结构和枚举,我们要枚举每一个 a[i]作为最后一个点(这里会影响减去了多少个d)同时维护一个最大值,同时开一个优先队列(小的在前)用来维护所选的m个是否需要去掉,不论我们怎选所消耗掉的dcnt都只和最后一个点有关所以我们不用考虑太多,每次减少的cntd恒等于d*i,因此我们只需要关心a[i]本身的大小就好..队列内部元素数量不足m时候主要是正数就入队切加入sum,队列元素>=m时候就判断是否需要把最小的移除

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
ll a[N];
int main()
{
int t;
cin>>t;
while(t--)
{
ll n,m,d;
cin>>n>>m>>d;
for(ll i=1;i<=n;i++) cin>>a[i];
priority_queue <int,vector<int>,greater<int> >q;
ll sum=0;
ll ans=0;
ll cnt=1;
ll nl=0;
for(ll i=1;i<=n;i++)
{ sum-=d;
ll q1=q.size();
if(q1<m)
{
if(a[i]>0) sum+=a[i],q.push(a[i]);
// cout<<sum<<endl;
}
else
{
ll num1=q.top();
if(num1<a[i])
{
sum=sum-num1+a[i];
q.pop();
q.push(a[i]);
} }
// cout<<sum<<" "<<a[i]<<endl;
ans=max(ans,sum);
}
cout<<ans<<'\n'; }
}
/*
1
2 1 1
-1 2
*/

请各位看了之后大胆评论说一下感受,会根据各位的感受调整

Codeforces Round 894 (Div. 3) A-E cd 894 div3的更多相关文章

  1. Codeforces Round #243 (Div. 1)-A,B,C-D

    此CF真是可笑.. . 由于早晨7初始点,因此,要做好CF时间已经17没有休息一小时,加上中午5小时耐力赛. 心里很清楚.是第一个问题的时候,几乎被解读为寻求最大的领域和.然后找到一个水体,快速A降. ...

  2. Codeforces Round #533 (Div. 2)题解

    link orz olinr AK Codeforces Round #533 (Div. 2) 中文水平和英文水平都太渣..翻译不准确见谅 T1.给定n<=1000个整数,你需要钦定一个值t, ...

  3. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  4. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  5. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  6. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  7. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  8. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  9. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  10. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

随机推荐

  1. ExpiringMap学习总结

    一.ExpiringMap简介 ExpiringMap是一个轻量级的Java缓存方式 针对一些小体量的项目,存储的数据量也不是很大(如校验码)的情况下,使用Redis会增加系统的复杂性和维护难度.它的 ...

  2. uniapp微信小程序uni.request捕获500异常

    通常使用ajax,axios等进行服务请求,500错误或者其他的错误都会直接进入到错误通道里头,比如ajax异常的话会进入到error的回调函数里头,axios异常会进行到catch里头,一开始以为u ...

  3. Vue3 项目

    创建 Vue3 项目的步骤如下: 安装 Node.js Vue3 需要依赖 Node.js 环境,因此需要先安装 Node.js.可以从官网下载 Node.js 的安装包并安装,也可以使用包管理器安装 ...

  4. fuser命令详解

    fuser -mv 作用 fuser命令是用来显示所有正在使用着指定的file.file system或者sockets的进程信息.具体来说,fuser -mv的作用如下: 参数-m:指定一个被加载的 ...

  5. deeplearning4j训练MNIST数据集以及验证

    训练模型官方示例 MNIST数据下载地址: http://github.com/myleott/mnist_png/raw/master/mnist_png.tar.gz GitHub示例地址: ht ...

  6. MindSponge分子动力学模拟——体系控制(2024.05)

    技术背景 在传统的分子动力学模拟软件中,对于分子体系的控制,例如控制体系的相对位置亦或是绝对位置,通常都是通过施加一些约束算法来实现的.例如用于限制化学键的LINCS算法,又比如水分子体系非常常用的S ...

  7. 制作SSL证书(签发免费证书)

    制作SSL证书(签发免费证书) 下载证书生成器 wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 wget https://pkg.cfssl.org ...

  8. tkinter的Text组件设置禁止编辑

    完整代码: from tkinter import * import requests window = Tk() window.geometry('1000x500+300+100') window ...

  9. Dockerfile-NGINX镜像制作

    1 NGINX镜像制作: 1.1 NGINX-dockerfile FROM centos:7 LABEL maintainer www.chenleilei.net RUN useradd www ...

  10. 什么是LLM大模型训练,详解Transformer结构模型

    本文分享自华为云社区<LLM 大模型学习必知必会系列(四):LLM训练理论篇以及Transformer结构模型详解>,作者:汀丶. 1.模型/训练/推理知识介绍 深度学习领域所谓的&quo ...