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 ...
随机推荐
- 获取docker镜像的tag列表
已nginx为例 命令如下 wget -q https://registry.hub.docker.com/v1/repositories/nginx/tags -O - | sed -e 's/[] ...
- Java入门准备:Java开发环境的安装与卸载
Java的三大版本 JavaSE:标准版 JavaME:嵌入式开发 JavaEE:企业级开发 JDK(Java Development Kit):Java开发者工具包 JRE(Java Runtime ...
- webpack4 使用babel处理ES6语法的一些简单配置
一,安装包 npm install --save-dev babel-loader @babel/corenpm install @babel/preset-env --save-devnpm ins ...
- django forms的常用命令及方法(一)
根据别人网上发布,个人爱好收集 Form表单的功能 自动生成HTML表单元素 检查表单数据的合法性 如果验证错误,重新显示表单(数据不会重置) 数据类型转换(字符类型的数据转换成相应的Python类型 ...
- px em rem区别
国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢? PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的 ...
- 没想到 TCP 协议,还有这样的骚操作。。。
大家好,我是小林. 昨晚有位读者问了我这么个问题: 大概意思是,一个已经建立的 TCP 连接,客户端中途宕机了,而服务端此时也没有数据要发送,一直处于 establish 状态,客户端恢复后,向服务端 ...
- 51nod1676-无向图同构【乱搞】
正题 题目连接:http://www.51nod.com/Challenge/Problem.html#problemId=1676 题目大意 给出两张\(n\)个点\(m\)条边的无向图,求这两张图 ...
- Pycharm新建模板默认添加作者时间等信息(逼格更高,好像很历害的样子)
在pycharm使用过程中,关于代码编写者的一些个人信息快捷填写,使用模板的方式比较方便. 方法如下: 1.打开pycharm,选择File-Settings 2.选择Editor--Color&am ...
- 做毕设的tricks
CNKI上无法下载博硕士学位论文的PDF版本,只有CAJ版本,挺恶心的.直接下载安装Chrome extension就可以解决了. 链接:https://share.weiyun.com/5HGFF2 ...
- 常见的==和equals比较
在笔试上碰到很多这样类似的题,全部整理到这里 String a = "Hello"; String b = "Hello"; String c = new St ...