2023年多校联训NOIP层测试3

T1 数列变换 \(10pts\)

  • 考虑暴力,发现 \(f\) 数列进行一次变换 \(A\) ,再进行一次变换 \(B\) 后,恢复成了原数列; \(f\) 数列进行一次变换 \(B\) ,再进行一次变换 \(A\) 后,也恢复成了原数列。即变换 \(A\) 可以和变换 \(B\) 相互抵消。

    • 本质是差分是前缀和的逆运算(讲树状数组的时候顺带讲了,没认真听,现在才想起来,祭)。
  • 直接暴力,数据有点弱,时间复杂度 \(O(n×|sumA-sumB|)\) 。
  • 这个数据卡负数的取模也真是醉了,在这里挂了 \(30pts\) ,这里推荐两篇讲解负数取模的博客。link1 link2
  • 赛场上前缀和打错了,挂了 \(60pts\) 。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define sort stable_sort
#define endl '\n'
ll f[1000],sum[1000];
int main()
{
ll n,m,i,j,k,num=0;
char pd;
cin>>n>>m;
for(i=1;i<=n;i++)
{
cin>>f[i];
sum[i]=(sum[i-1]+f[i])%998244353;
}
for(i=1;i<=m;i++)
{
cin>>pd>>k;
if(pd=='A')
{
num+=k;
}
if(pd=='B')
{
num-=k;
}
}
if(num>0)
{
for(i=1;i<=num;i++)//直接暴力
{
for(j=2;j<=n;j++)
{
f[j]=(f[j]+f[j-1]+998244353)%998244353;
}
}
for(i=1;i<=n;i++)
{
cout<<f[i]%998244353<<" ";
}
}
if(num==0)
{
for(i=1;i<=n;i++)
{
cout<<f[i]%998244353<<" ";
}
}
if(num<0)
{
for(i=1;i<=-num;i++)//直接暴力
{
for(j=n;j>=2;j--)
{
f[j]=(f[j]-f[j-1]+998244353)%998244353;
}
}
for(i=1;i<=n;i++)
{
cout<<f[i]%998244353<<" ";
}
}
return 0;
}

T2 超级质数 \(0pts\)

  • 部分分( \(40pts\) ):筛法求素数+暴力枚举

  • 这题卡空间 \(64MB\) ,结果赛场上把筛素数数组大小改成了 \(5e7\) ,但筛的范围是 \(7e7\) ,挂了40pts。

  • 考虑打表,打表发现太大了,压缩不下,但是得到从 \(1\) ~ \(4×10^7\)的超级质数个数为 \(76488\) 。

    • 隔壁 wkh分段打表貌似没我暴力多。
  • 正解:线性筛出所有超级质数,二分查找回答答案,复杂度主要在线性筛上,略带卡常,请使用 \(scanf,printf\) or关闭 \(cin,cout\) 同步流。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define sort stable_sort
    #define endl '\n'
    int prime[4000001],cjprime[80001],sum[10],len=0,cjlen=0;
    bool vis[40000100];//某人(我)写成char,但没有报错
    bool check(int x)
    {
    sum[0]=sum[1]=sum[1]=sum[2]=sum[3]=sum[4]=sum[5]=sum[6]=sum[7]=sum[8]=sum[9]=0;
    while(x>0)
    {
    sum[x%10]++;
    if(sum[x%10]>=2)
    {
    return false;
    }
    x/=10;
    }
    return true;
    }
    void isprime(int n)
    {
    int i,j;
    memset(vis,false,sizeof(vis));
    for(i=2;i<=n;i++)
    {
    if(vis[i]==false)
    {
    len++;
    prime[len]=i;
    if(check(i)==true)
    {
    cjlen++;
    cjprime[cjlen]=i;
    }
    }
    for(j=1;j<=len&&i*prime[j]<=n;j++)
    {
    vis[i*prime[j]]=true;
    if(i%prime[j]==0)
    {
    break;
    }
    }
    }
    }
    int main()
    {
    int n,i,l,r,fl,fr;
    scanf("%d",&n);
    isprime(40000000);
    for(i=1;i<=n;i++)
    {
    scanf("%d%d",&l,&r);
    fl=upper_bound(cjprime+1,cjprime+1+cjlen,l-1)-cjprime-1;//记得是l-1
    fr=upper_bound(cjprime+1,cjprime+1+cjlen,r)-cjprime-1;//第一个大于r的数字的下标减一就是第一个小于等于r的数字的下标
    printf("%d\n",fr-fl);
    }
    return 0;
    }
  • 花絮:请从下往上阅读,\(Accoders\) 的测评机太老了,“运行错误”不一定是 \(RE\) ,还可能是空间炸了(出题人为什么要卡空间啊,喂)。



T3 区间加和 \(45pts\)

  • 部分分( \(45pts\) ):\(O(n×max(k))\)的离线暴力即可

T4 距离序列 \(6pts\)

  • 部分分( \(6pts\) ):输出 \(1\)

「SFCOI-3」Sadness Fan Club Round 3

这场比赛和luogu上的比赛时间重了,然后就 \(4h\) 打两场比赛,两场比赛都挂分了

T1 P9492 「SFCOI-3」进行一个拆的解 \(30pts\)

  • 部分分( \(30pts\) ):

    • Subtask \(0\) ( \(15pts\) ):序列内全部相等公共时输出 No
    • Subtask \(1\) ( \(15pts\) ):输出 YES

      不,可以,总司令

  • 正解:
    • 考虑一个贪心的思想(不会证明):

      • 当 \(n\) 为偶数时,将序列 \(a_1...a_n\) 分成\(a_1...a_{\frac{n}{2}}\) 和\(a_{\frac{n}{2}+1}...a_n\) 一定是最优方案。
      • 当 \(n\) 为奇数时,将序列分成如下两种情况一定是最优方案。
        • \(a_1...a_{\frac{n-1}{2}}\) 和\(a_{\frac{n-1}{2}+1}...a_n\)
        • \(a_1...a_{\frac{n+1}{2}}\) 和\(a_{\frac{n+1}{2}+1}...a_n\)
    • 分别处理,进行模拟即可。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define sort stable_sort
#define endl '\n'
int a[1000010];
int main()
{
int t,n,i,j,flag,mid;
cin>>t;
for(i=1;i<=t;i++)
{
cin>>n;
flag=0;//多测不请客,爆零两行泪
for(j=1;j<=n;j++)
{
cin>>a[j];
}
for(j=1;j<=n-1;j++)
{
if(a[j]!=a[j+1])//特判全部相等的情况
{
flag=1;
break;
}
}
if(flag==0)
{
cout<<"NO"<<endl;
}
else
{
flag=0;
if(n%2==0)
{
for(j=1;j<=n/2;j++)
{
if(a[j]!=a[j+n/2])//若前后两个序列有不同的数字,则一定可以满足题意
{
flag=1;
break;
}
}
if(flag==1)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
else
{
mid=n/2+1;
for(j=1;j<=n/2;j++)//1~(n-1)/2和(n-1)/2+1~n
{
while(a[j]!=a[mid]&&mid<=n)
{
mid++;
}
mid++;
}
if(mid>=n+2)
{
cout<<"YES"<<endl;
}
else
{
mid=1;
for(j=n/2+2;j<=n;j++)//1~(n+1)/2和(n+1)/2+1~n
{
while(a[j]!=a[mid]&&mid<=n)
{
mid++;
}
mid++;
}
if(mid>=n/2+3)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
}
}
}
return 0;
}

后记

NOIP=CSP

2023年多校联训NOIP层测试3+「SFCOI-3」Sadness Fan Club Round 3的更多相关文章

  1. Contest1893 - 2019年6月多校联训b层测试1

    传送门 密码:waxadyt T1 暴力 对于任意相邻的两个值 中间能到达的最大高度是固定的 加上头尾,判一下就好了 代码//感谢Th Au K #include<bits/stdc++.h&g ...

  2. NOIP模拟测试8「匹配·回家」

    匹配 哈希能A 水到爆炸 回家 事实上我做过一个原题,甚至比这个回家难的多,而且那个题多组询问必经点 然后我做一组询问就打炸了 大约就是删了很多东西,然后自己想的太简单了 直接统计了割点,懒得打lca ...

  3. NOIP模拟测试26「嚎叫响彻在贪婪的机房·主仆见证了 Hobo 的离别·征途堆积出友情的永恒」

    题目比较神仙,注意是题目神仙 贪婪暗示贪心,堆积暗示堆优化$\%\%\%\%\%\%\%$ 两个乱搞$+$一个堆优化$dp$ 嚎叫响彻在贪婪的机房 题解 对于一个序列来说只要他们差的$gcd$不为$1 ...

  4. NOIP模拟测试19「count·dinner·chess」

    反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...

  5. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

  6. 20190803 NOIP模拟测试12「斐波那契(fibonacci)· 数颜色 · 分组 」

    164分 rank11/64 这次考的不算太差,但是并没有多大的可能性反超(只比一小部分人高十几分而已),时间分配还是不均,T2两个半小时,T1半个小时,T3-额十几分钟吧 然额付出总是与回报成反比的 ...

  7. NOIP模拟测试8「寿司」

    考试时打的类似$n^2$暴力,然后炸了只有10分 后来验证我的算法伪了. 题解 显然你有一种解法,假设你要在一个B点断开将R分别移向最左 最右,这样只用分别计算B点右面蓝色数量左面蓝色数量就得到了一个 ...

  8. NOIP模拟测试38「金·斯诺·赤」

    金 辗转相减见祖宗 高精 #include<bits/stdc++.h> using namespace std; #define A 2000 #define P 1 #define N ...

  9. NOIP模拟测试28「阴阳·虎·山洞」

    写这几个题解我觉得我就像在按照官方题解抄一样 阴阳 题解 将题目中给的阴阳看作黑色和白色 首先我们观察到最后生成图中某种颜色必须是竖着单调递增或竖着单调递减 类似这样 否则不满足这个条件 但合法染色方 ...

  10. NOIP模拟测试30「return·one·magic」

    magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G ...

随机推荐

  1. Win10 高效语音输入方案:听写功能 win + H

    win + H 打开听写功能,即可打开语音输入,帮你快速糊完文档 (队友亲测好用)

  2. 基于java+springboot的求职招聘网站-求职招聘管理系统

    该系统是基于java+springboot开发的求职招聘网站.网上招聘管理系统.网上人才招聘系统.毕业生求职招聘系统.大学生求职招聘系统.校园招聘系统.企业招聘系统.是给师弟开发的毕业设计.大家学习过 ...

  3. Shell-基本

  4. [转帖]Oracle如何重启mmon/mmnl进程(AWR自动采集)

    https://www.cnblogs.com/jyzhao/p/10119854.html 学习一下 环境:Oracle 11.2.0.4 RAC现象:sysaux空间满导致无法正常生成快照,清理空 ...

  5. 【转帖】一文解析ethtool 命令的使用

    命令简介 ethtool命令用于查询和控制网络设备驱动程序和硬件设置,尤其是有线以太网设备,devname网卡的名称.网卡就像是交换机的一个端口,正常使用我们只是配置网卡IP地址等信息,网卡的速率.双 ...

  6. [转帖]window10下如何安装fio

    1.fio下载地址(实测有效): https://github.com/axboe/fio/releaseshttps://github.com/axboe/fio/releases 其他的地址如​​ ...

  7. sringboot 调试端口启用的写法

    注意 需要在 -jar 的后面加 加在前面貌似没用 $JAVA_HOME/bin/java -Dloader.path=$CAF_MODULE_PATHS -jar -Dspring.profiles ...

  8. Python设计模式:你的代码真的够优雅吗?

    当涉及到代码优化时,Python作为一种高级编程语言,具有广泛的应用领域和强大的功能.在软件开发中,设计模式是一种被广泛采用的解决问题的方案,它提供了一种在特定情境中重复使用的可行方案.在Python ...

  9. 基于Seata探寻分布式事务的实现方案

    作者:京东物流技术与数据智能部 张硕 1 背景知识 随着业务的快速发展.业务复杂度越来越高,几乎每个公司的系统都会从单体走向分布式,特别是转向微服务架构.随之而来就必然遇到分布式事务这个难题,这篇文章 ...

  10. 【k哥爬虫普法】Python程序员爬取视频资源13万部,一分钱没挣,获刑2年!

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...