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 ...
随机推荐
- 在vue-cli项目中定义全局 filter、method 方法
1.创建 filters.js(methods.js) 文件: 2.filters.js(methos.js) 中定义全局过滤方法: 1 export default { 2 /** 时间戳转换 */ ...
- UVA 506 System Dependencies(模拟 烂题)
https://vjudge.net/problem/UVA-506 题目是给出了五种指令,DEPEND.INSTALL.REMOVE.LIST.END,操作的格式及功能如下: DEPEND item ...
- 鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步 | 百篇博客分析OpenHarmony源码 | v29.01
百篇博客系列篇.本篇为: v29.xx 鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁当立 ...
- 鸿蒙内核源码分析(内存主奴篇) | 皇上和奴才如何相处 | 百篇博客分析OpenHarmony源码 | v10.04
百篇博客系列篇.本篇为: v10.xx 鸿蒙内核源码分析(内存主奴篇) | 皇上和奴才如何相处 | 51.c.h .o 前因后果相关篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 ...
- P4585-[FJOI2015]火星商店问题【线段树,可持久化Trie】
正题 题目链接:https://www.luogu.com.cn/problem/P4585 题目大意 \(n\)个集合,开始每个集合中有一个数字. 开启新的一天并且往集合\(s\)中插入数字\(v\ ...
- kubelet源码分析——关闭Pod
上一篇说到kublet如何启动一个pod,本篇讲述如何关闭一个Pod,引用一段来自官方文档介绍pod的生命周期的话 你使用 kubectl 工具手动删除某个特定的 Pod,而该 Pod 的体面终止限期 ...
- Shiro 550反序列化漏洞分析
Shiro 550反序列化漏洞分析 一.漏洞简介 影响版本:Apache Shiro < 1.2.4 特征判断:返回包中包含rememberMe=deleteMe字段. Apache Shiro ...
- Http Only Cookie保护AccessToken
前言 JWT认证方式目前已被广泛使用,一直以来我们将token放在请求头中的Authorization中,若通过此种方式,一旦token被恶意窃取,攻击者可肆意对用户可访问资源进行任意索取,我们大多都 ...
- 未来云原生 | CIF 论坛精彩看点
当下云原生技术正在飞速发展,那么如何准确理解「云原生」?在发展不够成熟,行业认知差异大的情况下,不论是云原生计算基金会(CNCF),还是行业的任何大咖,都不能给出精确的.便于理解的定义.我们要理解的逻 ...
- CSS引入字体文件
在css引入字体文件可以直接把以下代码复制到css文件中 /* 字体声明 */ @font-face {font-family: 'icomoon';src: url('fonts/icomoon.e ...