Wannafly挑战赛26题解
为啥混进了几道不是魔禁的题……出题人太不敬业了……
\(A\) 御坂网络
为啥没有番外个体和整体意志呢
暴力模拟就好了,这个要是都打错我干脆滚回去学文化课算了
//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=1005;
int x[N],y[N],n;double d;
inline ll dis(R int i,R int j){return 1ll*(x[i]-x[j])*(x[i]-x[j])+1ll*(y[i]-y[j])*(y[i]-y[j]);}
bool ck(R int id){
fp(i,1,n)if(id!=i&&dis(id,i)!=d)return false;
return true;
}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d",&n);
fp(i,1,n)scanf("%d%d",&x[i],&y[i]);
d=dis(1,2);if(ck(1))return puts("1"),0;
fp(i,2,n)if(d=dis(1,i),ck(i))return printf("%d\n",i),0;
puts("-1");
return 0;
}
\(B\) 冥土追魂
首先我们发现一件事情,肯定是若干行全都被拿走,然后剩下那些不够\(m\)次的全都集中在一行。这个贪心的正确性显然
那么我们把所有的行按\(sum\)排列,然后枚举一下哪一行是选那些不够\(m\)次的就好了
//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
R int res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
const int N=1005;
int mp[N][N],id[N];ll res,mn,ret,sum[N],r[N];
int n,m,k;
inline bool qwq(const int &x,const int &y){return x>y;}
inline bool cmp(const int &x,const int &y){return sum[x]==sum[y]?r[x]>r[y]:sum[x]<sum[y];}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),m=read(),k=read();
fp(i,1,n)fp(j,1,m)mp[i][j]=read(),sum[i]+=mp[i][j];
fp(i,1,n)id[i]=i,sort(mp[i]+1,mp[i]+1+m,qwq);
fp(i,1,n)fp(j,1,k%m)r[i]+=mp[i][j];
sort(id+1,id+1+n,cmp);
fp(i,1,k/m)ret+=sum[id[i]];
if(k==n*m)return printf("%lld\n",ret),0;
res=1e18;
fp(i,1,k/m)cmin(res,ret-sum[id[i]]+r[id[i]]+sum[id[k/m+1]]);
fp(i,k/m+1,n)cmin(res,ret+r[id[i]]);
printf("%lld\n",res);
return 0;
}
\(C\) 七彩线段
如果只有一种颜色的话,我们可以把坐标离散化一下,直接用树状数组维护\(dp\)就可以了
因为颜色不超过\(7\)种,我们把所有线段按右端点排序,然后再记录一个\(2^7\)的状态表示颜色就可以了
//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
R int res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
const int N=1e5+5;
struct node{
int l,r,len,col;
node(){}
node(R int li,R int ri,R int L,R int C):l(li),r(ri),len(L),col(C){}
inline bool operator <(const node &b)const{return r==b.r?l<b.l:r<b.r;}
}st[N];
int b[N<<1],l[N],r[N],col[N],c[N<<1][135],len[N],sz[255];
int n,m,top,tot,res,k,t;
inline void upd(R int x,R int y,R int id){for(;x<=tot;x+=x&-x)cmax(c[x][id],y);}
inline int query(R int x,R int id){R int res=-1;for(;x;x-=x&-x)cmax(res,c[x][id]);return res;}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),m=read(),res=-1,b[tot=1]=0;
fp(i,1,n)b[++tot]=l[i]=read(),b[++tot]=r[i]=read(),col[i]=read()-1,len[i]=r[i]-l[i];
sort(b+1,b+1+tot),tot=unique(b+1,b+1+tot)-b-1;
fp(i,1,n)l[i]=lower_bound(b+1,b+1+tot,l[i])-b,r[i]=lower_bound(b+1,b+1+tot,r[i])-b;
fp(i,1,n)st[i]=node(l[i],r[i],len[i],col[i]);
fp(s,1,127)sz[s]+=sz[s>>1]+(s&1);
sort(st+1,st+1+n);
memset(c,-1,sizeof(c));
fp(i,0,tot)c[i][0]=0;
fp(i,1,n){
fp(s,0,127)if(sz[s]<=m){
k=query(st[i].l-1,s),t=(s|(1<<st[i].col));
if(k!=-1)upd(st[i].r,k+st[i].len,t);
if(sz[t]==m)cmax(res,k+st[i].len);
}
}
printf("%d\n",res);
return 0;
}
\(D\) 禁书目录
完美地漏过了所有特殊情况的考虑
首先,我们假设元素\(i\)按\(a_i\)从大到小排序的话,它的排名为\(c\),那么它有用的概率就是\({1\over c}\)
证明的话……只考虑比它大的以及它自己这\(c\)个元素,显然只有它排在最前面的序列是有用的,所以有用的序列\((c-1)!\)个,那么它可以用的概率就是\({(c-1)!\over c!}={1\over c}\)喽
把每个元素的排名预处理出来,那么对于一个元素,它没有用的概率是\(1-{1\over c}\)。我们可以对于每一个\(b\)计算有多少序列它不存在,就是所有\(b_i=b\)的元素全都不合法的概率,直接乘起来就好了
然后有一个比较尴尬的问题就是有可能两个元素\(a_i=a_j\)且\(b_i=b_j\),这种情况下我们就不能简单把这两个变量看做独立的了,一个解决办法是钦定其中某一个必须排在前面,然后按上面的计算就可以了
//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
R int res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
const int N=5e5+5,P=998244353;
inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int ksm(R int x,R int y){
R int res=1;
for(;y;y>>=1,x=mul(x,x))(y&1)?res=mul(res,x):0;
return res;
}
int a[N],b[N],inv[N],rk[N],id[N],fac,n,k,res,mc;
inline bool ccmp(const int &x,const int &y){return a[x]>a[y];}
inline bool cmp(const int &x,const int &y){return b[x]<b[y];}
#define p(i) inv[rk[id[i]]]
int main(){
// freopen("testdata.in","r",stdin);
n=read(),inv[0]=inv[1]=1,fac=1;
fp(i,1,n)a[i]=read(),b[i]=read(),fac=mul(fac,i),id[i]=i;
fp(i,2,n)inv[i]=mul(P-P/i,inv[P%i]);
sort(id+1,id+1+n,ccmp);
fd(i,n,1)rk[id[i]]=(a[id[i+1]]==a[id[i]]?rk[id[i+1]]:i);
stable_sort(id+1,id+1+n,cmp);//如果两个元素相等,stable_sort不会改变它们的相对顺序
for(R int i=1,j=1;i<=n;i=j+1,j=i){
while(j<n&&b[id[j+1]]==b[id[j]])++j;
mc=P+1-p(i);
fp(k,i+1,j){
if(a[id[k]]==a[id[k-1]])rk[id[k]]=rk[id[k-1]]-1;
mc=mul(mc,P+1-p(k));
}
res=add(res,P+1-mc);
}
res=mul(res,fac);
printf("%d\n",res);
return 0;
}
剩下的先咕咕咕了
Wannafly挑战赛26题解的更多相关文章
- Wannafly挑战赛29题解
这套题目非常有意思啊23333--话说为啥没有上条先生的呢-- 传送门 \(A\) 御坂美琴 蠢了--首先先判总共加起来等不等于\(n\),不是的话就不行 然后dfs记录\(n\)不断分下去能分成哪些 ...
- Wannafly挑战赛26 B 冥土追魂
首先,证明结果一定是取某些整行,再加上一个多余的一行的前几个. 假如: x1<=x2<=x3<=x4<=x5 y1<=y2<=y3<=y4<=y5 取6 ...
- Wannafly挑战赛21A
题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...
- Wannafly 挑战赛 19 参考题解
这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...
- Wannafly挑战赛13 zzf的好矩阵 题解 答案解释
Wannafly挑战赛13 zzf的好矩阵 题解 文章目录 Wannafly挑战赛13 zzf的好矩阵 题解 分析 结论1 结论2 结论3 C数组对应带子说明 空白长度论述 后续黑色长度论述 能&qu ...
- 牛客wannafly 挑战赛14 B 前缀查询(trie树上dfs序+线段树)
牛客wannafly 挑战赛14 B 前缀查询(trie树上dfs序+线段树) 链接:https://ac.nowcoder.com/acm/problem/15706 现在需要您来帮忙维护这个名册, ...
- Wannafly挑战赛27
Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...
- 【Wannafly挑战赛4】F 线路规划 倍增+Kruskal+归并
[Wannafly挑战赛4]F 线路规划 题目描述 Q国的监察院是一个神秘的组织.这个组织掌握了整个帝国的地下力量,监察着Q国的每一个人.监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只 ...
- Wannafly挑战赛18 E 极差(线段树、单调栈)
Wannafly挑战赛18 E 极差 题意 给出三个长度为n的正整数序列,一个区间[L,R]的价值定义为:三个序列中,这个区间的极差(最大值与最小值之差)的乘积. 求所有区间的价值之和.答案对\(2^ ...
随机推荐
- __stdcall详解
对_stdcall 的理解(上) 在C语言中,假设我们有这样的一个函数:int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用 ...
- Git进阶--你可能不知道的很好用Git功能
一.刚提交的代码,发现需要微调一下 刚刚最新提交了一段代码,然后跟前端说,接口好了.过了2分钟,前端跟你说,哎,兄弟,那个金额能不能返回整数,不要小数点. 这个时候一般我们通常会修改一下之后,再提交一 ...
- 在VMware Workstation中安装Ubuntu Server 16.04.5图解教程
最近要在Ubuntu中部署openstack,为了节省空间和内存,最终选择了Ubuntu服务器.看了很多前辈和大佬的安装教程,在这里记录一下我自己的Ubuntu Server 16.04.5的安装过程 ...
- Shrio03 Authenticator、配置多个Realm、SecurityManager认证策略
1 Authenticator 简介 1.1 层次结构图 1.2 作用 职责是验证用户帐号,是ShiroAPI中身份验证核心的入口点:接口中声明的authenticate方法就是用来实现认证逻辑的. ...
- 手动制作CA证书
一.安装 CFSSL 证书下载官方地址:https://pkg.cfssl.org #下面三个安装包,无需下载,之前百度云中的压缩包中都有[root@linux-node1 ~]# cd /usr/l ...
- spring mvc 多库连接
最近弄了个spring mvc + hibernate4为框架的项目,其中需用到其他两个库的数据.具体如下: 1.将两库的application文件配置好,需注意的地方是两个事务控制是不一样的. 和 ...
- win10系统的快捷键
1.win10特有的快捷键:任务视图和虚拟桌面相关 (1)Win + Tab:查看任务视图 (2)Win + Ctrl + D:在任务视图中新建虚拟桌面 (3)Win + Ctrl + F4:关闭当前 ...
- Redhat安装python环境(readline模块)
多次尝试,发现linux下安装软件: yum install readline-devel readline patch yum update python -y # 这步很重要,修复了报错 pip3 ...
- 高性能mysql第三版(文摘)
第1章 mysql架构与历史 1.1处理和存储相分离,用户可以选择合适的存储引擎 1.2并发控制 表锁:开销小 行级锁:开销大 1.3事务 acid特性:原子性,一致性,隔离性,持久性 1.4 多版本 ...
- UVa 10603 Fill (暴力BFS+优先队列)
题意:给定4个数,a,b,c,d,分别代表空杯子容积为a,b,一个盛满水的杯子容积为c,让你不断倒水,找一个dd,是不是存在某个时刻, 某个杯子里的水dd,和d相同,或者无限接近.让求最少的倒水量和d ...