\(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的更多相关文章

  1. 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引

    本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...

  2. 2-1 Linux 操作系统及常用命令

    根据马哥linux初级视频 2-1.2-2来编辑 1. GUI与CLI GUI: Graphic User Interface CLI: Command Line Interface 注:在Windo ...

  3. Fedora 21 安装 Nvidia 驱动以及失败后的补救方法

    在 Linux 桌面系统下玩了这么久,大部分时间都是使用 Ubuntu,偶尔使用一下 Fedora.我的电脑中安装有多个 Linux 发行版,见这里<在同一个硬盘上安装多个Linux发行版及Fe ...

  4. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

  5. CSharpGL(21)用鼠标拾取、拖拽VBO图元内的点、线或本身

    CSharpGL(21)用鼠标拾取.拖拽VBO图元内的点.线或本身 效果图 以最常见的三角形网格(用GL_TRIANGLES方式进行渲染)为例. 在拾取模式为GeometryType.Point时,你 ...

  6. ABP(现代ASP.NET样板开发框架)系列之21、ABP展现层——Javascript函数库

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project ...

  7. C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密

    在上篇随笔<C#开发微信门户及应用(19)-微信企业号的消息发送(文本.图片.文件.语音.视频.图文消息等)>介绍了有关企业号的消息发送,官方特别声明消息是不用加密发送的.但是在回调的服务 ...

  8. 【转】MySQL性能优化的最佳21条经验

    文章转自: http://blog.csdn.net/waferleo/article/details/7179009 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关 ...

  9. HTTP 错误 500.21 - Internal Server Error 解决方案

    不久前重新安装了Windows7,在安装了VS2010 开发平台之后,将网站发布到IIS,访问发生如下错误: HTTP 错误 500.21 - Internal Server Error处理程序“Ni ...

  10. swift与OC之间不得不知道的21点

    swift与OC之间不得不知道的21点   自6月的WWDC大会上由苹果的大神Chris Lattner向我们首次展示swift至今已经大半年时间了,虽然绝大部分软件公司代码里还都见不到一丁点swif ...

随机推荐

  1. HTTP证书申请,设置应用程序服务器使用HTTPS

    HTTP证书申请,设置应用程序服务器使用HTTPS https://certs.godaddy.com/repository/ 根证书和中级证书下载地址(godaddy) ######Godaddy购 ...

  2. Spring Native实战(畅快体验79毫秒启动springboot应用)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. 常用的jquery 中一些js

    目录: 1.验证用户登录信息 2. 获取下拉框所选中的元素 3.  动态获取 id 和对应文本框的值  4. table 中 tr  的隐藏 5 . 更换图片  6. ajax  进行提交 7. 判断 ...

  4. display:flex;下的子元素width无效问题

    因为flex属性默认值为flex:0 1 auto;其中 1 为 flex中的 flex-shrink 属性. 该属性介绍: 一个数字,规定项目将相对于其他灵活的项目进行收缩的量. 根据上述介绍可以理 ...

  5. photoshop CS6打不开提示请卸载并重新安装该程序

    运行Photoshop.exe时,提示错误: 解决方案: 以管理员身份运行该exe文件

  6. CF932G-Palindrome Partition【PAM】

    正题 题目链接:https://www.luogu.com.cn/problem/CF932G 题目大意 给出一个长度为\(n\)的字符串,将其分为\(k\)段(\(k\)为任意偶数),记为\(p\) ...

  7. 深入浅出WPF-08.Event( 事件)01

    事件(Event) 首先我们来继续说一下UI组件树,因为WPF事件 的路由环境就是组件树.WPF中的树有两种,一种是逻辑树(Logical Tree),一种是可视元素树(Visual Tree).逻辑 ...

  8. 深入浅出WPF-03.XAML语法

    2 XAML语法 树形结构,我们将整个XAML的结构想象成一棵树,我们从树的顶部向下看,形成俯视图.最上面的叶子节点会覆盖父节点,同级的子节点,后面的(也就是树的最上面)会覆盖前面的.覆盖包含了形状( ...

  9. pymysql链接时,密码含有特殊符号。

    类如含有@之类的特殊符号,在链接数据库时,需要提前url转码,不然会报密码错误. python3/2分别引用是同样的第三方库,但是引用方式不同 python2 from urllib import q ...

  10. dbus中的数据类型

    DBus中也是类似于静态语言,使用了"强类型"数据格式.在DBus上传递的所有数据都需要声明其对应的类型,下面整理了下,DBus中的数据类型,以及在DBus中声明的数据类型是什么意 ...