10.12 csp-s模拟测试70 木板+打扫卫生+骆驼
T1 木板
求$[\sqrt{n},n)$间有多少个数的平方是n的倍数
通过打表可以发现(我没带脑子我看不出来),符合条件的数构成一个等差数列,公差为首项
而首项就是将n质因数分解后每个质因数出现次数除二,向上取整,这个数一定是大于$\sqrt{n}$的最小的符合条件的数
$\sqrt{n}$将$n$分解质因数后求出首项,$(n-1)/$首项就是小于$n$里有几个,即答案
积累:$papa$大神教我,打表之前先猜规律,用小点看看猜的对不对,然后再用大点验证,想不出来的数学题就打打表,找找规律
#include<iostream>
#include<cstdio>
#include<cmath>
#define ll long long
using namespace std;
ll n,ans,z[],cnt,num[];
ll read()
{
ll aa=,bb=;char cc=getchar();
while(cc>''||cc<''){if(cc=='-') bb=-;cc=getchar();}
while(cc<=''&&cc>=''){aa=(aa<<)+(aa<<)+(cc^'');cc=getchar();}
return aa*bb;
}
void devide(ll x)
{
ll xx=sqrt(x);
for(ll i=;i<=xx;i++){
if(x%i==){
z[++cnt]=i;num[cnt]=;
while(x%i==) x/=i,num[cnt]++;
}
}
if(x>) z[++cnt]=x,num[cnt]=;
}
ll quick(ll x,ll p)
{
ll as=;
while(p){
if(p&) as=as*x;
x=x*x;
p>>=;
}
return as;
}
int main()
{
while(){
n=read();ans=;cnt=;
if(!n) break;
devide(n);
for(ll i=;i<=cnt;i++) ans*=quick(z[i],(num[i]+)/);
printf("%lld\n",(n-)/ans*);
}
return ;
}
木板
T2 打扫卫生
首先肯定是$dp$
考场写的是$n^2$的,每次用桶把$a[j]$的贡献减去,更新答案,最后再循环一遍都加回来,$T60$
但我们发现如果不同的数的个数大于了$\sqrt{n}$,那么他一定不优(大于$\sqrt{n}$,那还不如一段就一个,这样就只有$n$)
所以我们可以在往回加的时候特判,如果$cnt$大于$\sqrt{n}$,那就记录下这个位置,然后$break$,下次循环就只从$pos$循环就行了,加上这个减枝可以到$T80$
正解:$cnt$一定小于$\sqrt{n}$,那么我们枚举i前不同的数的个数,复杂度就降到了$O(n\sqrt{n})$
用$pre[a[i]]$记录$a[i]$上次出现的位置,$b[j]$表示从$b[j]+1~i$一共有$j$个不同的数,$c[j]$表示从$b[j]+1~i$有多少个不同的数
$i++$后,如果$pre[a[i]]<=j$,说明$a[i]$在$b[j]+1~i-1$这一段没有出现过,所以$b[j]+1~i$这一段中不同数的个数就变成了$c[j]+1$,更新$c[j]$
如果$c[j]>j$,我们为了维护$c[j]==j$,就需要调整$b[j]$的位置,使$b[j]$合法
设$pos=b[j]+1$(原位置),如果$pre[a[pos]]>pos$说明在后面还有一个$a[pos]$,那么删掉这个对个数没有影响,直到$pre[a[pos]]<=pos$,那么删掉这个数,$pos+1~i$这个区间就正好有$j$个数了,更新$b[j]=pos$,$c[j]=j$,同时更新$f[i]$数组
积累:没有思路想$dp$,优化的时候找$dp$的瓶颈,看是否能用一些数据结构或多记一些东西突破他
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,m,nn,a[],b[],c[],pre[],f[];
int read()
{
int aa=,bb=;char cc=getchar();
while(cc>''||cc<''){if(cc=='-') bb=-;cc=getchar();}
while(cc>=''&&cc<=''){aa=(aa<<)+(aa<<)+(cc^'');cc=getchar();}
return aa*bb;
}
int main()
{
n=read();m=read();nn=sqrt(n);
for(int i=;i<=n;i++) a[i]=read();
memset(pre,-,sizeof(pre));
for(int i=;i<=n;i++){
f[i]=f[i-]+;
for(int j=;j<=nn;j++)
if(pre[a[i]]<=b[j]) c[j]++;
pre[a[i]]=i;
for(int j=;j<=nn;j++){
if(c[j]>j){
int pos=b[j]+;
while(pre[a[pos]]>pos) pos++;
b[j]=pos;c[j]--;
}
f[i]=min(f[i],f[b[j]]+j*j);
}
}
printf("%d\n",f[n]);
return ;
}
打扫卫生
T3 骆驼
咕咕咕
10.12 csp-s模拟测试70 木板+打扫卫生+骆驼的更多相关文章
- csps模拟69chess,array,70木板,打扫卫生题解
题面:https://www.cnblogs.com/Juve/articles/11663898.html 69: 本以为T2傻逼题结果爆零了...T3原题虽然打的不是正解复杂度但是都不记得做过这道 ...
- [考试反思]1012csp-s模拟测试70:盘旋
这套题比较烂... 上来看到T2是原题,一想上一次考试遇到原题就不换,这次应该也是,于是直接开始码,码了一半然后换题了 T1打表找规律或者推式子都不难... T2水的一匹暴力剪枝即可,但是我并不知道数 ...
- csps模拟测试70
又炸了,T1没开$long long$,炸掉$50pts$,昨天因为SB错误挂掉$100pts$. 我kuku了,以后细心点吧.
- 安装nginx python uwsgi环境 以及模拟测试
uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...
- [考试反思]0729NOIP模拟测试10
安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色
2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
- 黑苹果macOS Sierra 10.12 安装教程(venue11 pro测试)
黑苹果macOS Sierra 10.12 安装教程(venue11 pro测试) 2017-03-12 03:46:24 by SemiconductorKING PS:刚刚装好黑苹果,来记录一篇折 ...
随机推荐
- WPF 后台获得 数据模板里的内容控件(DataTemplate)
原文:WPF 后台获得 数据模板里的内容控件(DataTemplate) 假如 <Window.Resources> 里 有一个 Datatemplate 我想获得TextBlo ...
- Python学习记录:括号配对检测问题
Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...
- 第四组项目总结(UML图设计)
第四组项目总结(UML图设计) 相关链接: 墨刀原型链接:https://pan.baidu.com/s/1qrVI_je8NONVHT_FwH6Pwg 需求文档链接:https://www.cnbl ...
- Filter 原理
二.Filter 原理 2.1 Filter 概述 Filter(过滤器)是 DirectShow 中最基本的概念.DirectShow 是通过 Filter Graph 来管理 Filter 的.F ...
- 大话设计模式Python实现-单例模式
单例模式(Singleton Pattern):保证类仅有一个实例,并提供一个访问它的全局访问点. 下面是单例模式的demo: #!/usr/bin/env python # -*- coding:u ...
- 基于 Swoole 的轻量级框架 CabalPHP
CabalPHP CabalPHP 是一个基于Swoole的轻量.高效.全异步开源框架. 亮点 全异步单机超高性能,轻松分布式部署 支持HTTP.TCP.websocket等多种协议 完善数据库引擎, ...
- 2019年9月Github上最热门的JavaScript开源项目
2019年9月Github上最热门的JavaScript开源项目 前端开发 前端开发 微信号 qianduan1024 功能介绍 专注于Web前端技术文章分享,包含JavaScript.HTML5 ...
- 运行时报:尝试加载 Oracle 客户端库时引发 BadImageFormatException,如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题
运行环境为: Windows Server2012 Oracle11g 32位数据库+客户端 IIS发布后提示错误信息: “尝试加载 Oracle 客户端库时引发 BadImageFormatExc ...
- Spring Boot 中如何配置 Profile
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- Java生鲜电商平台-App系统架构开发与设计
Java生鲜电商平台-App系统架构开发与设计 说明:阅读此文,你可以学习到以下的技术分享 1.Java生鲜电商平台-App架构设计经验谈:接口的设计2.Java生鲜电商平台-App架构设计经验谈:技 ...