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:刚刚装好黑苹果,来记录一篇折 ...
随机推荐
- 华为mate10 pro内置浏览器出现的令人头疼的样式兼容问题
问题描述: 下图红色框区域内容在华为mate10 pro(以下简称mate10)内置浏览器中整体向左偏移,没有居中,其它手机浏览器都无该问题,如下图 问题分析 经过一番追根溯源,我发现是 bo ...
- Java入门系列之字符串特性(二)
前言 上一节我们讲解到字符串本质上就是字符数组,同时详细讲解了字符串判断相等需要注意的地方,本节我们来深入探讨字符串特性,下面我们一起来看看. 不可变性 我们依然借助初始化字符串的方式来探讨字符串的不 ...
- 在dubbo的一端,看Netty处理数据包,揭网络传输原理
如今,我们想要开发一个网络应用,那是相当地方便.不过就是引入一个框架,然后设置些参数,然后写写业务代码就搞定了. 写业务代码自然很重要,但是你知道: 你的数据是怎么来的吗?通过网络传输过来的呗. 你知 ...
- 2018-8-10-win10-uwp-进度条-Marquez-
原文:2018-8-10-win10-uwp-进度条-Marquez- title author date CreateTime categories win10 uwp 进度条 Marquez li ...
- 2019 Python100道 面试 题,你会几道?
0 遇到过得反爬虫策略以及解决方法? 1.通过headers反爬虫 2.基于用户行为的发爬虫:(同一IP短时间内访问的频率) 3.动态网页反爬虫(通过ajax请求数据,或者通过JavaScript生成 ...
- Python爬虫反反爬:CSS反爬加密彻底破解!
刚开始搞爬虫的时候听到有人说爬虫是一场攻坚战,听的时候也没感觉到特别,但是经过了一段时间的练习之后,深以为然,每个网站不一样,每次爬取都是重新开始,所以,爬之前谁都不敢说会有什么结果. 前两天,应几个 ...
- IOC控制反转、Unity简介
参考博客地址: Unity系列文章,推荐:http://www.cnblogs.com/qqlin/archive/2012/10/16/2717964.html https://www.cnblog ...
- Linux(ubuntu) 一行代码搞定查看文件目录
ls 命令:• ls 是英文单词 list 的简写,其功能为列出目录的内容,是用户最常用的命令之一,类似于 DOS 下的 dir 命令 ls命令之后加各种参数的作用: ls -a 显示指定目录下所有子 ...
- Android开发总体布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- [b0035] python 归纳 (二十)_多进程数据共享和同步_共享内存Value & Array
1. Code # -*- coding: utf-8 -*- """ 多进程 数据共享 共享变量 Value,Array 逻辑: 2个进程,对同一份数据,一个做加法,一 ...