Preface

多校第二场,依靠罚时优势打到了校内的Rank 2

暴力分块碾标算系列


T4 Game

题目大意:在一个数集\([1,n]\)中两个人轮流选择其中的一个数,并从数集中删去这个数所有约数。先将所有数删去的人获胜。

比赛的时候手玩了\(n<=5\)的情况发现TM的怎么总是先手赢啊,然后就认为这是个先手必胜的游戏然而真的是这样

赛后听法老讲了真正的做法,分假定情况讨论:

  • 假设这个状态先手必胜,那就让先手胜。
  • 假设这个状态后手必胜,那么先手把\(1\)取走之后相当与把这个必败态扔给了后手(因为\(1\)对后面的选取没有任何影响)

故先手必胜,CODE

#include<cstdio>
using namespace std;
int n;
int main()
{
while (scanf("%d",&n)!=EOF) puts("Yes");
return 0;
}

T10 Swaps and Inversions

题目大意:给出一个数列,你可以花费\(x\)的代价交换两个数。在交换结束之后,还要花费\(y*逆序对个数\)的代价。问最小的代价。

这个一个结论:交换次数等于逆序对个数,因此树状数组逆序对之后乘上\(\min(x,y)\)即可。

CODE

#include<cstdio>
#include<cctype>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=100005;
int a[N],bit[N],b[N],n,m,x,y;
long long ans;
inline int find(int x)
{
int l=1,r=m,mid;
while (l<=r)
{
mid=l+r>>1; if (b[mid]==x) return mid;
if (b[mid]<x) l=mid+1; else r=mid-1;
}
}
inline int lowbit(int x)
{
return x&-x;
}
inline int get(int x)
{
int res=0; for (;x<=m;x+=lowbit(x)) res+=bit[x]; return res;
}
inline void add(int x)
{
for (;x;x-=lowbit(x)) ++bit[x];
}
int main()
{
register int i;
while (scanf("%d%d%d",&n,&x,&y)!=EOF)
{
for (i=1;i<=n;++i) scanf("%d",&a[i]),b[i]=a[i];
memset(bit,0,sizeof(bit));
sort(b+1,b+n+1); m=unique(b+1,b+n+1)-b-1;
for (ans=0,i=1;i<=n;++i)
{
a[i]=find(a[i]); ans+=get(a[i]+1); add(a[i]);
}
printf("%lld\n",ans*(x<y?x:y));
}
return 0;
}

T7 Naive Operations

题目大意:这题不用翻译也能看懂吧,毕竟都是常见套路。给你两个数组\(a,b\),初始时\(a\)的所有元素都为\(0\)。然后定义两种操作:

  • \(add\ l\ r\):将\(a_i,i\in[l,r]\)都加一
  • \(query\ l\ r\):询问\(\sum_{i=l}^r \lfloor \frac{a_i}{b_i}\rfloor\)

官方给出的解法是搞两棵线段树,然后一波操作反正我不会

比赛的时候YY了一个延时修改的分块,2000+ms卡过。

首先我们记录一个块内的答案,然后考虑什么时候这个值才会被修改。

当然是有个数\(i\)(或多个)的值被累加到多出一个\(b_i\)来了。

有了这个思想,我们再维护一下每一块内最少还要整块累加多少次就会使答案发生改变,记作\(v_i\)。

然后修改的时候两端还是暴力改,整块的话也弄一个标记。

然后核心的来了,我们修改的时候不更新整块标记,而是查询的时候

查询还是先暴力计算两端,然后对于被查询的块,看一下整块的累加是否已经超过\(v_i\),是的话再更新。

一般情况下速度良好,大致\(O(n\sqrt n\cdot k)\),\(k\)为常数,大致在\([In^2\ n,In\ n]\)吧,其实主要还是和\(b_i\)的关系比较大。

块乐的CODE

#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long LL;
const int N=100005,BLO=320;
int n,m,a[N],b[N],l,r,blk[N],v[BLO],t[BLO],size;
LL sum[BLO]; string s;
inline int min(int a,int b)
{
return a<b?a:b;
}
inline void reset(int id)
{
register int i; v[id]=1e9;
for (i=(id-1)*size+1;i<=id*size;++i)
{
sum[id]-=a[i]/b[i]; a[i]+=t[id];
sum[id]+=a[i]/b[i]; v[id]=min(v[id],b[i]-a[i]%b[i]);
} t[id]=0;
}
inline void modify(int l,int r)
{
register int i;
for (i=l;i<=min(blk[l]*size,r);++i)
{
if (!(++a[i]%b[i])) ++sum[blk[l]]; v[blk[l]]=min(v[blk[l]],b[i]-a[i]%b[i]);
}
if (blk[l]!=blk[r]) for (i=(blk[r]-1)*size+1;i<=r;++i)
{
if (!(++a[i]%b[i])) ++sum[blk[r]]; v[blk[r]]=min(v[blk[r]],b[i]-a[i]%b[i]);
}
for (i=blk[l]+1;i<=blk[r]-1;++i) ++t[i];
}
inline LL query(int l,int r)
{
register int i; LL tot=0;
for (i=l;i<=min(blk[l]*size,r);++i)
tot+=(a[i]+t[blk[l]])/b[i];
if (blk[l]!=blk[r]) for (i=(blk[r]-1)*size+1;i<=r;++i) tot+=(a[i]+t[blk[r]])/b[i];
for (i=blk[l]+1;i<=blk[r]-1;++i)
{
if (t[i]>=v[i]) reset(i); tot+=sum[i];
}
return tot;
}
int main()
{
//freopen("7.in","r",stdin); freopen("7.out","w",stdout);
ios::sync_with_stdio(false); register int i;
while (cin>>n>>m)
{
memset(a,0,sizeof(a)); memset(v,63,sizeof(v));
memset(t,0,sizeof(t)); memset(sum,0,sizeof(sum));
for (size=sqrt(n),i=1;i<=n;++i)
cin>>b[i],blk[i]=(i-1)/size+1,v[blk[i]]=min(v[blk[i]],b[i]);
while (m--)
{
cin>>s; cin>>l>>r;
if (s[0]=='a') modify(l,r); else cout<<query(l,r)<<endl;
}
}
return 0;
}

Postscript

主要是其他队伍要么没写出T7要么想线段树花了一段时间。

不过还是很高兴的,出题人用心出题目,用脚造数据

2018 Multi-University Training Contest 2 部分简单题解析的更多相关文章

  1. 2018 Multi-University Training Contest 1 部分简单题解析

    Preface ACM系列赛第一站,没有进前200还是很伤的. 主要是T2当时没写出来就GG了,后来看了下其实不是很难. 题目按照比赛时我们A的顺序讲,其实我都是被陈潇然大佬和ZWC带飞的. T1 M ...

  2. 2018 Nowcoder Multi-University Training Contest 2

    目录 Contest Info Solutions A. run D. monrey G. transform H. travel I. car J. farm Contest Info Practi ...

  3. 2018 Nowcoder Multi-University Training Contest 1

    Practice Link J. Different Integers 题意: 给出\(n\)个数,每次询问\((l_i, r_i)\),表示\(a_1, \cdots, a_i, a_j, \cdo ...

  4. 2018 Nowcoder Multi-University Training Contest 5

    Practice Link A. gpa 题意: 有\(n\)门课程,每门课程的学分为\(s_i\),绩点为\(c_i\),要求最多删除\(k\)门课程,使得gpa最高. gpa计算方式如下: \[ ...

  5. 2018 Nowcoder Multi-University Training Contest 10

    Practice Link J. Rikka with Nickname 题意: 给出\(n\)个字符串,要求依次合并两个串\(s, t\),满足将\(t\)合并到\(s\)中变成\(r\),使得\( ...

  6. HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/500 ...

  7. 2018 Multi-University Training Contest 2

    题目链接:2018 Multi-University Training Contest 2 6318 Swaps and Inversions 题意:sum=x*逆序个数+交换次数*y,使sum最小 ...

  8. 2018 Multi-University Training Contest 1

    比赛链接:2018 Multi-University Training Contest 1 6301 Distinct Values 题意:输出一个长度为n的序列,要求满足m个区间的数都不相同,并且字 ...

  9. hdu 6301 Distinct Values (2018 Multi-University Training Contest 1 1004)

    Distinct Values Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

随机推荐

  1. Python-初识模块

    #系统自带的模块 import sys print(sys.path)#打印环境变量 print(sys.argv)#打印绝对路径 import os #cmd_res = os.system(&qu ...

  2. weblogic系列漏洞整理 -- 1. weblogic安装

    目录 0. 概述 1. 下载安装Java环境 2. 下载安装weblogic 安装 部署domain域 进入weblogic 3. 排错 如果出现如下错误 0. 概述 WebLogic是美国Oracl ...

  3. python中urllib的整理

    本不想使用这个玩意,奈何看到很多地方使用,随手整理下 urllib模块提供的urlretrieve()函数,urlretrieve()方法直接将远程数据下载到本地 urlretrieve(url, f ...

  4. VsCode 的使用

    一.简介 VsCode(Visual Studio Code),官网地址:https://code.visualstudio.com/ Visual Studio Code is a lightwei ...

  5. zabbix-Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused

    监控zabbix服务端这台服务器,然后显示Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Conne ...

  6. kvm企业级虚拟化环境部署

    由于要做毕设了,不得不要搭建Linux环境,自己做的课题是ELK日志分析相关.因此要大干一场,一下子计划采用近10台机器来做试验,但由于我这里只有三台物理机,所以我就搞起了虚拟化kvm.在Linux里 ...

  7. VS2015安装与C++进行简单单元测试

    1:VS2015是微软最新发布的编译器,http://www.itellyou.cn/这是我们的北航大神助教提供的下载网址,以前我们都是自己在网上找,找到的总不是那么如意,这下大神助教提供的网址就好好 ...

  8. Beta冲刺博客集合贴

    Beta阶段第一次冲刺 Beta阶段第二次冲刺 Beta阶段第三次冲刺 Beta阶段第四次冲刺 Beta阶段第五次冲刺 Beta阶段总结博客

  9. CRM项目之stark组件(1)

    admin组件 admin组件的简单使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py ...

  10. Codeforces gym 101343 A. On The Way to Lucky Plaza【概率+逆元+精度问题】

     2017 JUST Programming Contest 2.0 题目链接:http://codeforces.com/gym/101343/problem/A A. On The Way to ...