21.8.7 test
\(NOIP\) 测试
考的一般般。
\(T1\) WOJ4656
签到题,其实就是算 \(\sum\limits_{i=1}^n i^2\)
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
int n,ans=0,len;
string s;
signed main(){
cin>>n>>s;
len=s.length();
for(int i=1;i<=len;i++)
ans=(ans+i*i%mod)%mod;
cout<<ans;
return 0;
}
当然可以用小学奥数 \(O(1)\) 算
\(T2\) WOJ4657(堆,区间交)
给出 \(n\) 个区间,选出 \(m\) 个区间使得这 \(m\) 个区间的交最大。
打出暴力后又打了一个正确性不保证的 dp,排序后成功过了大样例
区间交的左右端点都是给出区间的左右端点,所以考虑把所有区间按左端点排序后从左往右枚举,同时在堆里加入他们的右端点,对于一个左端点,从右往左数第 \(m\) 个右端点就是它对应交区间的右端点,所以小根堆维护一个从右往左的 \(m\) 个右端点。另外,如果一个区间的右端点小于当前堆顶,那么该区间的答案一定比上个答案劣(因为左端点单调上升),可以直接跳过,对于第二行输出,在维护答案时维护答案对应左右端点,枚举所有区间,完全覆盖答案区间的就输出,一共输出 \(m\) 个,另外答案为 \(0\) 时特判一下随便输出 \(m\) 个就行了。
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define in read()
inline int read(){
int p=0,f=1;
char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){p=p*10+c-'0';c=getchar();}
return p*f;
}
const int N=1e6+5;
const int M=5e4+5;
int num,n,m;
struct seq{
int l,r,o;
}a[N];
bool cmp(seq x,seq y){
if(x.l!=y.l)return x.l<y.l;
return x.r<y.r;
}
struct node{
int x,i;
};
bool operator<(const node &x,const node &y){
return x.x>y.x;
}
priority_queue<node>q;
signed main(){
num=in,n=in,m=in;
for(int i=1;i<=n;i++)
a[i].l=in,a[i].r=in,a[i].o=i;
sort(a+1,a+1+n,cmp);
for(int i=1;i<=m;i++)
q.push({a[i].r,i});
int ans=max(0ll,q.top().x-a[m].l),ansl=a[m].l,ansr=q.top().x;
for(int i=m+1;i<=n;i++){
if(a[i].r<q.top().x)continue;
q.push({a[i].r,i});
q.pop();
if(ans>max(0ll,q.top().x-a[i].l))continue;
ans=max(0ll,q.top().x-a[i].l);
ansl=a[i].l,ansr=q.top().x;
}
cout<<ans<<'\n';
if(ans==0){
for(int i=1;i<=m;i++)
cout<<i<<" ";
return 0;
}
int cnt=0;
for(int i=1;i<=n;i++){
if(a[i].l<=ansl&&a[i].r>=ansr){
cout<<a[i].o<<" ";
cnt++;
}
if(cnt==m)break;
}
return 0;
}
\(T3\) WOJ4658(容斥)
时间奉献给T2了,打了指数暴力就走了
容斥公式:
\(|A_1\cup A_2 \cup\cdots\cup A_m|=\sum\limits_{1\leq i\leq m}|A_i|-\sum\limits_{1\leq i\leq j\leq m}|A_i\cap A_j|+\sum\limits_{1\leq i\leq j\leq k\leq m}|A_i\cap A_j\cap A_k|-\cdots+(-1)^{m-1}*|A_1\cap A_2 \cap\cdots\cap A_m|\)
在此题中也就是说所有1个话题相同的方案数减去两个话题相同的方案数加上3个话题相同的方案数减去……一直到n个话题。
我们只需要统计 \(2^N\) 个状态分别有多少人的集合或他们的子集,然后算出当前状态 \(1\) 的个数,奇数就加,偶数就减。在统计人数时需要枚举一个二进制数集合的所有子集,这篇blog里有详细的证明。
然后卡卡常(或者不用)就做完了。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int M=1e5+5;
const int mod=1e9+7;
const int N=1<<20+5;
int num,n,m,k;
int a[M];
int cnt[N];
inline int lowbit(int x){return x&(-x);}
inline int pc(int x){
int res=0;
while(x){
x-=lowbit(x);
res++;
}
return res;
}
inline int qpow(int a,int b){
int ans=1;
while(b){
if(b&1)ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
inline int add(int a,int b){return (a+b)%mod;}
int ans,maxn;
signed main(){
cin>>num>>n>>m>>k;
for(int i=1;i<=m;i++){
cin>>a[i];
cnt[a[i]]++;
maxn=max(maxn,a[i]);
}
sort(a+1,a+1+m);
int qn=unique(a+1,a+1+m)-(a+1);
for(int i=1;i<=qn;i++)
for(int sub=(a[i]-1)&a[i];sub;sub=(sub-1)&a[i])
cnt[sub]+=cnt[a[i]];
for(int i=1;i<=maxn;i++){
if(cnt[i]){
qn=pc(i);
if(qn&1) ans=add(ans,qpow(cnt[i],k));
else ans=add(mod,ans-qpow(cnt[i],k));
}
}
cout<<ans;
return 0;
}
21.8.7 test的更多相关文章
- 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...
- 2-1 Linux 操作系统及常用命令
根据马哥linux初级视频 2-1.2-2来编辑 1. GUI与CLI GUI: Graphic User Interface CLI: Command Line Interface 注:在Windo ...
- Fedora 21 安装 Nvidia 驱动以及失败后的补救方法
在 Linux 桌面系统下玩了这么久,大部分时间都是使用 Ubuntu,偶尔使用一下 Fedora.我的电脑中安装有多个 Linux 发行版,见这里<在同一个硬盘上安装多个Linux发行版及Fe ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
- CSharpGL(21)用鼠标拾取、拖拽VBO图元内的点、线或本身
CSharpGL(21)用鼠标拾取.拖拽VBO图元内的点.线或本身 效果图 以最常见的三角形网格(用GL_TRIANGLES方式进行渲染)为例. 在拾取模式为GeometryType.Point时,你 ...
- ABP(现代ASP.NET样板开发框架)系列之21、ABP展现层——Javascript函数库
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project ...
- C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密
在上篇随笔<C#开发微信门户及应用(19)-微信企业号的消息发送(文本.图片.文件.语音.视频.图文消息等)>介绍了有关企业号的消息发送,官方特别声明消息是不用加密发送的.但是在回调的服务 ...
- 【转】MySQL性能优化的最佳21条经验
文章转自: http://blog.csdn.net/waferleo/article/details/7179009 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关 ...
- HTTP 错误 500.21 - Internal Server Error 解决方案
不久前重新安装了Windows7,在安装了VS2010 开发平台之后,将网站发布到IIS,访问发生如下错误: HTTP 错误 500.21 - Internal Server Error处理程序“Ni ...
- swift与OC之间不得不知道的21点
swift与OC之间不得不知道的21点 自6月的WWDC大会上由苹果的大神Chris Lattner向我们首次展示swift至今已经大半年时间了,虽然绝大部分软件公司代码里还都见不到一丁点swif ...
随机推荐
- Web GIS 航拍实现的智慧园区数字孪生应用
前言 随着智慧城市建设的不断发展,智慧园区作为智慧城市的先行区,其覆盖区域越来越大,产值越来越集中,对于园区数字化建设和智能化管理的诉求也愈加强烈.园区数字化管理是以实现园区多维度业务数据汇聚.融合. ...
- 学习Tomcat(二)之容器概览
Tomcat容器的Server模块有管理容器的启动和关闭.管理了容器内的服务组件Service.管理了全局JNDI资源的功能,对Tomcat容器的生命周期管理有重要意义.Tomcat的服务组件则是To ...
- Java学习笔记--注解和反射
注解和反射 1. 注解 注解作用: 对程序做出解释 被其他程序读取 注解格式: @注释名,还可以添加一些参数值,例如@SuppressWarnings(value="unchecked&qu ...
- 关于软链接ln -s 的使用
1.效果跟windows创建快捷方式是一样的,先找到要被创建的原始文件或目录.然后才能创建. 2.格式:ln -s [源文件或目录] [目标文件或目录] 3.源文件或目录必须是绝对目录. 4 ...
- 自己实现Controller——标准型
标准Controller 上一篇通过一个简单的例子,编写了一个controller-manager,以及一个极简单的controller.从而对controller的开发有个最基本的认识,但是细心观察 ...
- Django学习day09随堂笔记
每日测验 """ 今日考题: 1.choices参数的应用场景有哪些,如何获取该字段的值 2.django是什么模型的框架,简述MTV与MVC模型 3.多对多表关系有几种 ...
- SpringCloudAlibaba - 整合 Nacos 实现服务注册与发现
目录 前言 环境 Nacos是什么? 服务发现原理 搭建 Nacos Server Nacos Server 下载地址 Nacos Server 的版本选择 运行 Nacos Server Nacos ...
- 【PHP数据结构】栈和队列的应用
通过栈和队列的学习,我们似乎会感觉到其实数据结构还是非常简单的嘛.当然,这只是一个开始,我们从顺序表.链表开始,到现在的栈和队列,其实都是为了将来在铺路.在树和图的遍历算法中,都可以见到栈和队列的身影 ...
- mysql 基础配置经验
创建库: 排序:utf8_unicode_ci和utf8_general_ci对中.英文来说没有实质的差别.utf8_general_ci校对速度快,但准确度稍差. 普遍的意思utf8_unicode ...
- Docker系列(14)- Portainer可视化面板安装
官网 https://documentation.portainer.io/v2.0-be/deploy/beinstalldocker/ 可视化 portainer docker run -d -p ...