2018 Multi-University Training Contest 2 杭电多校第二场
开始逐渐习惯被多校虐orz 菜是原罪
1004 Game (hdoj 6312)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6312
虽然披着博弈的外壳 但是也算是结论题 一开始开题的时候一看到博弈就不想写了 但是大佬们过题太快了 所以想到可能是结论题
题意:有A和B两个人可以对一个1-n的全排列进行操作 每一次都可以删去一个数和它所有质子 A和B轮流进行操作 先删光全排列为赢 A先手 给出n 判断A的输赢
因为每一次删数操作都会删去1 所以可以忽视掉1 直接看2-n的状态 如果在这个状态下B赢了 那么A先去选择1来转变自己的局面 A可以赢 如果2-n的状态下A赢了 可以不用专门去选择1 保持赢的状态 所以A是必胜的
知道这个结论后 代码就无比的简单了 不过要注意多组输入 这一场都要注意这个问题
代码如下
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
int n;
while(scanf("%d",&n)!=EOF){
printf("Yes\n");
}
return ;
}
1007 Naive Operations (hdoj 6315)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6315
需要优化的线段树
题意:给一个全排列的数组b和为空的数组a 分为两个操作 第一个操作为给指定区间l-r a[l]-a[r]都加上1 第二个操作为给定指定区间 求b[l]/a[i]到b[r]/a[r]的和
区间求和问题 一开始想到的是裸的树状数组 但是太暴力 华丽丽的给卡掉了 一直卡到了比赛结束
每次对a数组进行++操作 都转化成--操作 具体做法为设一个minn赋值为对应的b[i]的值 一旦a[i]++,可以转换为minn--,直到minn为零 此时用于计数的sum进行++,minn重新赋值为b[i]
代码如下
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn=1e5+;
struct node{
ll sum,pos,minn,lazy;
}kk[maxn<<];
int a[maxn];
void pushup(int rt){
kk[rt].minn=min(kk[rt<<].minn,kk[rt<<|].minn);
kk[rt].sum=kk[rt<<].sum+kk[rt<<|].sum;
}
void pushdown(int rt){
if(kk[rt].lazy){
kk[rt<<].lazy+=kk[rt].lazy;
kk[rt<<|].lazy+=kk[rt].lazy;
kk[rt<<].minn-=kk[rt].lazy;
kk[rt<<|].minn-=kk[rt].lazy;
kk[rt].lazy=;
}
}
void build(int l,int r,int rt){
kk[rt].lazy=kk[rt].sum=;
if(l==r){
kk[rt].minn=kk[rt].pos=a[l];
kk[rt].sum=;
return ;
}
int mid=(l+r)>>;
build(l,mid,rt<<);
build(mid+,r,rt<<|);
pushup(rt);
}
void update(int L,int R,int l,int r,int rt){
if(L<=l&&r<=R&&kk[rt].minn>){
kk[rt].lazy++;
kk[rt].minn--;
return ;
}
if(l==r&&kk[rt].minn==){
kk[rt].sum++;
kk[rt].minn=kk[rt].pos;
kk[rt].lazy=;
return ;
}
int mid=(l+r)>>;
pushdown(rt);
if(L<=mid) update(L,R,l,mid,rt<<);
if(R>mid) update(L,R,mid+,r,rt<<|);
pushup(rt);
}
ll query(int L,int R,int l,int r,int rt){
if(L<=l&&r<=R) return kk[rt].sum;
int mid=(l+r)>>;
pushdown(rt);
ll ans=;
if(L<=mid) ans+=query(L,R,l,mid,rt<<);
if(R>mid) ans+=query(L,R,mid+,r,rt<<|);
return ans;
}
int main(){
int n,q,l,r;
while(~scanf("%d%d",&n,&q)){
for(int i=;i<=n;i++) scanf("%d",&a[i]);
build(,n,);
while(q--){
char s[];
scanf("%s%d%d",s,&l,&r);
if(s[]=='a') update(l,r,,n,);
if(s[]=='q') printf("%lld\n",query(l,r,,n,));
}
}
return ;
}
1011 Swaps and Inversions (hdoj 6318)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6318
树状数组+离散化 求逆序数
题意:给出一个数列 如果一个数的逆序数不为0 则要付出逆序数*x的代价 但是也可以选择交换相邻两项来减少逆序数 每次交换需要付出的代价为y
只要想到这是逆序数 就是一题板子题了 因为相邻两项也可以构成逆序对 所以就可以把问题简化为逆序数和*min(x,y)
逆序数在线性代数中有定义(orz还好没忘记这学期刚学的线代)一个数的逆序数 是在这个数之后所有比它要小的数字个数的和 这里可以用离散化的思想来处理 用树状数组来进行修改和查询
有个小坑 一直wa 后知后觉发现是姿势不对orz 在排序的时候进行特判 差不多一个结构体二重排序(?)
哦对了 会爆int 要开long long
代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e5+;
typedef long long ll;
int c[maxn],pos[maxn];
int n;
struct node{
int v;
int id;
}kk[maxn];
int cmp(node a,node b){
if(a.v==b.v) return a.id<b.id;
else return a.v<b.v;
}
int lowbit(int x){
return x&(-x);
}
void insert(int i,int x){
while(i<=n){
c[i]+=x;
i+=lowbit(i);
}
}
ll getsum(int i){
ll sum=;
while(i>=){
sum+=c[i];
i-=lowbit(i);
}
return sum;
}
int main(){
int x,y;
while(~scanf("%d%d%d",&n,&x,&y)){
ll ans=;
for(int i=;i<=n;i++){
scanf("%d",&kk[i].v);
kk[i].id=i;
}
sort(kk+,kk+n+,cmp);
for(int i=;i<=n;i++){
pos[kk[i].id]=i;
}
memset(c,,sizeof(c));
for(int i=;i<=n;i++){
insert(pos[i],);
ans+=i-getsum(pos[i]);
}
printf("%lld\n",(ll)ans*min(x,y));
}
return ;
}
2018 Multi-University Training Contest 2 杭电多校第二场的更多相关文章
- 2018 Multi-University Training Contest 1 杭电多校第一场
抱着可能杭电的多校1比牛客的多校1更恐怖的想法 看到三道签到题 幸福的都快哭出来了好吗 1001 Maximum Multiple(hdoj 6298) 链接:http://acm.hdu.edu. ...
- 2018 Multi-University Training Contest 9 杭电多校第九场 (有坑待补)
咕咕咕了太久 多校博客直接从第三场跳到了第九场orz 见谅见谅(会补的!) 明明最后看下来是dp场 但是硬生生被我们做成了组合数专场…… 听说jls把我们用组合数做的题都用dp来了遍 这里只放了用组 ...
- hdu6312 2018杭电多校第二场 1004 D Game 博弈
Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 杭电多校第二场 hdu 6315 Naive Operations 线段树变形
Naive Operations Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 502768/502768 K (Java/Other ...
- 2018 Multi-University Training Contest 3 杭电多校第三场
躺了几天 终于记得来填坑了 1001 Ascending Rating (hdoj 6319) 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6319 ...
- 2018杭电多校第二场1003(DFS,欧拉回路)
#include<bits/stdc++.h>using namespace std;int n,m;int x,y;int num,cnt;int degree[100007],vis[ ...
- 2019杭电多校第二场hdu6601 Keen On Everything But Triangle
Keen On Everything But Triangle 题目传送门 解题思路 利用主席树求区间第k小,先求区间内最大的值,再求第二大,第三大--直到找到连续的三个数可以构成一个三角形.因为对于 ...
- 2019杭电多校第二场hdu6602 Longest Subarray(线段树)
Longest Subarray 题目传送门 解题思路 本题求一个最大的子区间,满足区间内的数字要么出现次数大于等于k次,要么没出现过.给定区间内的数字范围是1~c. 如果r为右边界,对于一种数字x, ...
- 杭电多校第二场 1005 hack it
题意: 构造一个n*n 的 01 矩阵, 0 < n < 2001, 矩阵需要满足没有一个子矩阵的4个角都是1,并且矩阵内1的个数至少有85000个. 题解:数论构造题 参考From 代 ...
随机推荐
- Storm 消息分发策略
1.Shuffle Grouping:随机分组,随机派发stream里面的tuple,保证每个bolt接收到的tuple数目相同.2.Fields Grouping:按字段分组,比如按userid来分 ...
- 字符设备驱动(六)按键poll机制
title: 字符设备驱动(六)按键poll机制 tags: linux date: 2018-11-23 18:57:40 toc: true --- 字符设备驱动(六)按键poll机制 引入 在字 ...
- OS + Windows 10 / office excel vlookup / CredSSP
s https://support.microsoft.com/zh-cn/help/10749/windows-10-find-product-key 查找 Windows 7 或 Windows ...
- CSS3 vmax的用法
1. calc() calc():在流体布局上,可以通过calc()计算得到元素的宽度. 2. vw/vh/vmin/vmax的使用 vw/vh/vmin/vmax是视窗单位,也是相对单位.相对的不是 ...
- 【1】【leetcode-77】 组合
(典型,做过似曾相识但不熟悉,基本知道怎么做但调试了一个多小时各种错) 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: ...
- 09、 在QQ音乐中查找七里香这首歌的精彩评论
找到七里香这首歌的精彩评论 URL https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg?g_tk=5381&l ...
- 细说REST API安全之概述
目前许多前后端应用都采取REST架构风格,前端应用和后端服务通过API进行数据交换.通过REST API在网络中进行数据交换时很容易被网络抓包,然后进行恶意批量调用,最终导致后端服务不堪负重而影响正常 ...
- Spring Bean的ref属性和IoC注入集合
这是一个Demo 1.Phone.java package com.cn.pojo; public class Phone { private String name; private double ...
- Sqlserver直接附加数据库和设置sa密码
1.exec sp_attach_db 'test','E:\db\test.mdf','E:\db\test_log.ldf' 2.sp_password Null,'123','sa' 推荐一个微 ...
- Groovy 设计模式 -- proxy & delegate
Proxy https://en.m.wikipedia.org/wiki/Proxy 代理人 与 被代理人 是 一对一的关系. A proxy is an agent or substitute a ...