总结

初一第一,竞赛班第二

还可以,为了照顾提高班来的四个同学放了四个水题,可惜他们做的不是很理想,希望他们下次可以获得满意的成绩

这次做的其实是 AtCoder ABC237

A.Not Overflow

一道水题,C++11直接判断即可

有好多同学没开C++11,默哀默哀,希望大家下次不要再出锅了

#include <bits/stdc++.h>
using namespace std; long long n, l = -2147483648, r = 2147483647; int main() {
scanf("%lld", &n);
if (l <= n && n <= r) {
printf("Yes");
} else {
printf("No");
}
}

Code From 彬彬

B.Matrix Transposition

很简单,但是需要用到以前被老师骂的一种打法

数据中\(h,w<100000\),总不能开\(100000*100000\)吧...

所以用多少开多少

见代码

#include <bits/stdc++.h>
using namespace std;
long long n,m,x;
int main()
{
cin>>n>>m;
long long a[n+5][m+5];//数据问题,这样开比较保险
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
cout<<a[j][i]<<' ';
}
cout<<endl;
}
}

C.kasaka

先看前后各有多少a,如果后面少于前面,那就不行

为什么?

如果后面少于前面,那我们不能在后面补

反之,我们可以在前面补a

如果没判掉,就看除去头尾a的部分是否回文

#include <bits/stdc++.h>
using namespace std;
string x,y;//STL的字符串
long long t,w,len;
int main()
{
cin>>x;
y=x;//这里,不初始化长度就会越界
len=x.size();
while(x[t]=='a')t++;
while(x[len-w-1]=='a')w++;
if(w<t)
{
cout<<"No"<<endl;
}
else
{
for(int i=t;i<=len-w-1;i++)
{
y[i-t]=x[i];
}//突然想到可以用strstr
for(int i=0;i<len-t-w;i++)//判回文
{
if(y[i]!=y[len-t-w-i-1])
{
cout<<"No"<<endl;
return 0;
}
}
cout<<"Yes"<<endl;
}
}

D.LR insertion

显然是一道链表,利用链表原理,可以优化成\(O(n)\)

关于链表的介绍详见我的超级黑历史

这里我是手写的

#include <bits/stdc++.h>
using namespace std;
struct node {
int l,r;
}a[1000005];
long long n,t;
char c;
int main()
{
a[0].l=-1;
a[0].r=-1;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>c;
if(c=='L')
{
a[i].l=a[i-1].l;
a[a[i-1].l].r=i;
a[i-1].l=i;
a[i].r=i-1;
if(a[i].l==-1)
{
t=i;
}
}
else
{
a[i].r=a[i-1].r;
a[a[i-1].r].l=i;
a[i-1].r=i;
a[i].l=i-1;
}
}
cout<<t<<' ';
for(int i=t;i!=-1;i=a[i].r)
{
if(a[i].r!=-1)cout<<a[i].r<<' ';
}
}

以上是做出来的


以下是骗分的

E.Skiing

这道题是一道最长路,我打的SPFA只有98分,正解果然又是堆优化dij

98分代码

#include<bits/stdc++.h>
using namespace std;
struct node
{
long long to,w,next;
}a[1000005];
long long n,m,t,x,y,h[200005],b[200005],ans,f[200005];
void add(long long x,long long y)
{
t++;
a[t].to=y;
a[t].w=b[x]-b[y];
if(a[t].w<0)
{
a[t].w*=2;
}
a[t].next=h[x];
h[x]=t;
}
queue<long long>q;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
scanf("%lld",&b[i]);
f[i]=-1e14;
}
for(int i=1;i<=m;i++){
scanf("%lld%lld",&x,&y);
add(y,x);
add(x,y);
}
q.push(1);
f[1]=0;
while(!q.empty())
{
long long t=q.front();
q.pop();
for(int i=h[t];i;i=a[i].next)
{
if(f[t]+a[i].w>f[a[i].to])
{
f[a[i].to]=f[t]+a[i].w;
q.push(a[i].to);
}
}
}
for(int i=1;i<=n;i++)
{
if(f[i]>ans)ans=f[i];
}
cout<<ans;
}

一顿欺负 DeepSeaSpray,又问了问教练,终于看懂了正解dij是怎么搞的

去问 DeepSeaSpray ,不要问我

监督#include<bits/stdc++.h>
using namespace std;
struct node
{
long long to,w,next;
}a[1000005];
long long n,m,t,x,y,h[200005],b[200005],ans,dis[200005];
void add(long long x,long long y,long long z)
{
t++;
a[t].to=y;
a[t].w=z;
a[t].next=h[x];
h[x]=t;
}
struct nd{
long long x,dis;
bool operator <(const nd &xx)const
{
return dis>xx.dis;
}
nd(long long xx,long long xdis){
x=xx;
dis=xdis;
}
};
priority_queue<nd>p;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
scanf("%lld",&b[i]);
}
for(int i=1;i<=m;i++){
scanf("%lld%lld",&x,&y);
if(b[x]>b[y])add(y,x,b[x]-b[y]),add(x,y,0);
else add(x,y,b[y]-b[x]),add(y,x,0);
}
p.push(nd(1,0));
memset(dis,127,sizeof(dis));
dis[1]=0;
for(int i=1;i<=n-1;i++)
{
// cout<<t<<endl;
long long t=p.top().x;
p.pop();
for(int j=h[t];j;j=a[j].next)
{
// cout<<a[j].to<<' '<<a[j].w<<endl;
if(dis[t]+a[j].w<dis[a[j].to])
{
dis[a[j].to]=dis[t]+a[j].w;
p.push(nd(a[j].to,dis[a[j].to]));
}
}
}
for(int i=1;i<=n;i++)
{
ans=max(ans,b[1]-b[i]-dis[i]);
}
cout<<ans;
}

F.|LIS| = 3

考场dfs,只有8分

发现就是一个简单DP

设\(f_{i,x,y,z}\)表示前\(i\)个数构成的LIS中,长度为1的LIS结尾最小是\(x\),长度为2的是\(y\),长度为\(3\)的是为\(z\)

如果你知道\(O(nlog_n)\)的LIS做法的话你应该知道满足\(x<y<z\)

所以只要枚举第\(i+1\)个数时令其小于\(z\)就可以保证不会出现长度为\(x(3 < x)\)的LIS,

#include<bits/stdc++.h>
using namespace std;
long long n,m,f[1005][15][15][15],ans;
int main()
{
cin>>n>>m;
f[0][m+1][m+1][m+1]=1;
for(int i=0;i<n;i++)
{
for(int x=1;x<=m+1;x++)
{
for(int y=1;y<=m+1;y++)
{
for(int z=1;z<=m+1;z++)
{
for(int j=1;j<=m;j++)
{
if(j<=x)
{
f[i+1][j][y][z]+=f[i][x][y][z];
f[i+1][j][y][z]%=998244353;
}
else if(j<=y)
{
f[i+1][x][j][z]+=f[i][x][y][z];
f[i+1][x][j][z]%=998244353;
}
else if(j<=z)
{
f[i+1][x][y][j]+=f[i][x][y][z];
f[i+1][x][y][j]%=998244353;
}
}
}
}
}
}
for(int i=1;i<=m;i++)
{
for(int j=i+1;j<=m;j++)
{
for(int k=j+1;k<=m;k++)
{
ans+=f[n][i][j][k];
ans%=998244353;
}
}
}
cout<<ans;
}

我觉得很好理解,所以不讲了

G.Range Sort Query

直接sort六十分走起

#include<bits/stdc++.h>
using namespace std;
long long n,q,x,c,l,r,a[1000005];
bool cmp(long long x,long long y) {
return x>y;
}
int main()
{
cin>>n>>q>>x;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]==x)a[i]=1;
else if(a[i]>x)a[i]=2;
else a[i]=0;
}
for(int i=1;i<=q;i++)
{
cin>>c>>l>>r;
if(c==1)
{
sort(a+l,a+r+1);
}
else
{
sort(a+l,a+r+1,cmp);
}
}
for(int i=1;i<=n;i++)
{
if(a[i]==1)
{
cout<<i;
return 0;
}
}
}

后来听说是bt线段树,就不怎么想打了

2022年5月5日模拟赛题解与总结(ABC237)的更多相关文章

  1. FJoi2017 1月20日模拟赛 恐狼后卫(口糊动规)

    Problem 1 恐狼后卫(wolf.cpp/c/pas) [题目描述] 著名卡牌游戏<石炉传说>中有一张随从牌:恐狼后卫.恐狼后卫的能力是使得相邻随从的攻击力提高. 现在有n张恐狼后卫 ...

  2. FJoi2017 1月21日模拟赛 comparison(平衡树+thita重构)

    题目大意: 经黄学长指出,此题原题出自2014湖北省队互测 没有人的算术 规定集合由二元组(A,B)构成,A.B同时也是两个这样的集合,即A.B本身也是二元组 规定二元组S为严格最小集合,S=(S,S ...

  3. FJoi2017 1月20日模拟赛 直线斯坦纳树(暴力+最小生成树+骗分+人工构造+随机乱搞)

    [题目描述] 给定二维平面上n个整点,求该图的一个直线斯坦纳树,使得树的边长度总和尽量小. 直线斯坦纳树:使所有给定的点连通的树,所有边必须平行于坐标轴,允许在给定点外增加额外的中间节点. 如下图所示 ...

  4. FJoi2017 1月20日模拟赛 交错和(等差数列+rmq)

    [题目描述] 无限循环数字串S由长度为n的循环节s构成.设s为12345(n=5),则数字串S为123451234512345… 设Si为S的第i位数字,在上面的例子中,S1=1,S2=2,S6=1. ...

  5. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  6. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  7. 2015 AlBaath Collegiate Programming Contest(2月14日训练赛)

    A (By ggg): 题意:一个人还有x秒到红绿灯,这个红绿灯有g秒绿灯,y秒黄 灯,r秒红灯,问你到红绿灯的时候是什么灯.值得注意的是绿 灯变黄灯时,第g秒是黄灯了. B (By Anxdada) ...

  8. PKUSC 模拟赛 题解_UPD

    之前挖了两个大坑 一个是day1下午的第二题 另一个是day2上午的第五题 先说day1下午的第二题吧 我们显然不能O(n^2)的dp,所以我们只能算贡献 首先对于任意一个边界点而言,他对答案的贡献路 ...

  9. 【洛谷】xht模拟赛 题解

    前言 大家期待已久并没有的题解终于来啦~ 这次的T1和HAOI2016撞题了...深表歉意...表示自己真的不知情... 天下的水题总是水得相似,神题各有各的神法.--<安娜·卡列妮娜> ...

  10. 10.6-10.7 牛客网NOIP模拟赛题解

    留个坑... upd:估计这个坑补不了了 如果还补不了就删了吧

随机推荐

  1. Java中简单易懂的HashMap面试题(面试必备)

    这篇文章仅限小编个人的理解,小编不是Java方向的,只是对Java有很高的学习兴趣 如果有什么不对的地方还望大佬指点 HashMap的底层是数组+链表,(很多人应该都知道了) JDK1.7的是数组+链 ...

  2. gradle设置

    本地目录: gradle-wrapper.properties distributionUrl=file\:///D:/\.gradle/gradle-7.3-all.zip distribution ...

  3. MySQL 分组排序,取第一条

    select t1.* from coal_installed_capacity t1where NOT EXISTS (select * from coal_installed_capacity t ...

  4. Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on

    解决错误 Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test ...

  5. 共享USB打印机设置方法

    打印机共享 一.准备 所有计算机在同一个网段. 所有计算机在同一个工作组,组名可以自定义,默认WORKGROUP. 使用超级管理员用户,目的是为了激活guest用户.验证之后可以不需要此前提. 二.主 ...

  6. 痞子衡嵌入式:分享一个i.MXRT系列配套DRAM压力测试上位机工具(i.MXRT DRAM Tester)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦SE团队制作的i.MXRT配套DRAM压力测试上位机工具. 事情源于痞子衡的技术交流群里的提问,有群友在恩智浦官方技术公众号 [恩 ...

  7. Linux系统解压zip包出现中文乱码问题

    1. 使用指定GBK编码格式进行解压可以使用如下指定编码格式进行解压. unzip -O GBK 资料.zip 或者使用CP936也是可以指定GBK编码格式进行解压 unzip -O CP936 资料 ...

  8. 开源规则引擎——ice:致力于解决灵活繁复的硬编码问题

    背景介绍 业务中是否写了大量的 if-else?是否受够了这些 if-else 还要经常变动? 业务中是否做了大量抽象,发现新的业务场景还是用不上? 是否各种调研规则引擎,发现不是太重就是接入或维护太 ...

  9. Net DB Web多级缓存的实现

    1.客户端缓存(浏览器缓存) HTTP有一套控制缓存的协议-RFC7234,其中最重要的就是cache-control这个相应报文头,服务器返回时,如果Response带上 cache-control ...

  10. R语言网络数据爬取

    现在大家对爬虫的兴趣不断高涨,R和PYTHON是两个非常有力的爬虫工具.Python倾向于做大型爬虫,与R相比,语法相对复杂,因此Python爬虫的学习曲线会相对陡峭.对于那些时间宝贵,又想从网上获取 ...