小$P$的咕事

总结:

还行,就是$T1$写的慢了,$T2,T3$暴力有点锅

T1

小模拟。

打就是了。

可以小小的手玩一下。

(考试的时候某同志人肉对拍了$20min$)=.=

418 ms 360 KiB C++11 / 4.1 K
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#define N 10
#define Up 0
#define Down 1
#define Left 2
#define Right 3
#define LL long long using namespace std;
int bd[N][N],legal=0;
int bef[N][N],aft[N][N];
int bl,chn;
bool failed=0;
LL sco=0;
vector<int> dat;
void pour(){
for(int i=1;i<=bl;i++){
for(int j=1;j<=bl;j++){
if(bd[i][j]==0)printf(" ");
else printf("%4d",bd[i][j]);
}puts("");
}
}
void tou(){
int num;
for(int c=1;c<=bl;c++){
num=0;
dat.clear();
for(int l=1;l<=bl;l++){
// cout<<l<<" "<<c<<" "<<num<<endl;
// for(int i:dat){
// cout<<i<<" ";
// }
// if(!dat.empty())cout<<endl;
if(bd[l][c]==0)continue;
if(num==0)num=bd[l][c];
else {
if(num==bd[l][c]){
dat.push_back(num<<1);
sco+=num<<1;
num=0;
}
else{
dat.push_back(num);
num=bd[l][c];
}
}
}
if(num!=0)dat.push_back(num);
int vid=0;
for(int l=1;l<=bl;l++)
bd[l][c]=0;
for(int l=1;l<=bl;l++){
if(vid==dat.size())
break;//All set
bd[l][c]=dat[vid];
vid++;
}
}
}
void tod(){
int num;
for(int c=1;c<=bl;c++){
num=0;
dat.clear();
for(int l=bl;l>=1;l--){
// cout<<l<<" "<<c<<" "<<num<<endl;
if(bd[l][c]==0)continue;
if(num==0)num=bd[l][c];
else {
if(num==bd[l][c]){
dat.push_back(num<<1);
sco+=num<<1;
num=0;
}
else{
dat.push_back(num);
num=bd[l][c];
}
}
}
if(num!=0)dat.push_back(num);
int vid=0;
for(int l=bl;l>=1;l--)
bd[l][c]=0;
for(int l=bl;l>=1;l--){
if(vid==dat.size())
break;//All set
bd[l][c]=dat[vid];
vid++;
}
} }
void tol(){
int num;
for(int l=1;l<=bl;l++){
num=0;
dat.clear();
for(int c=1;c<=bl;c++){
if(bd[l][c]==0)continue;
if(num==0)num=bd[l][c];
else {
if(num==bd[l][c]){
dat.push_back(num<<1);
sco+=num<<1;
num=0;
}
else{
dat.push_back(num);
num=bd[l][c];
}
}
}
if(num!=0)dat.push_back(num);
int vid=0;
for(int c=1;c<=bl;c++)
bd[l][c]=0;
for(int c=1;c<=bl;c++){
if(vid==dat.size())
break;//All set
bd[l][c]=dat[vid];
vid++;
}
}
}
void tor(){
int num;
for(int l=1;l<=bl;l++){
num=0;
dat.clear();
for(int c=bl;c>=1;c--){
if(bd[l][c]==0)continue;
if(num==0)num=bd[l][c];
else {
if(num==bd[l][c]){
dat.push_back(num<<1);
sco+=num<<1;
num=0;
}
else{
dat.push_back(num);
num=bd[l][c];
}
}
}
if(num!=0)dat.push_back(num);
int vid=0;
for(int c=bl;c>=1;c--)
bd[l][c]=0;
for(int c=bl;c>=1;c--){
if(vid==dat.size())
break;//All set
bd[l][c]=dat[vid];
vid++;
}
}
}
void make_new(int k,int val){
int tot=0,cnt=0;
for(int i=1;i<=bl;i++)
for(int j=1;j<=bl;j++)
if(bd[i][j]==0)tot++;
if(tot==0)return ;
k=1+k%tot;
for(int i=1;i<=bl;i++){
for(int j=1;j<=bl;j++){
if(bd[i][j]==0){
cnt++;
if(cnt==k){
bd[i][j]=val;
return ;
}
}
}
}
}
bool check(){
for(int i=1;i<=bl;i++)
for(int j=1;j<=bl;j++)
if(aft[i][j]!=bef[i][j])return 1;
return 0;
}
int main(){
int a,b,c;
// freopen("game.in" ,"r",stdin);
// freopen("game.out","w",stdout);
scanf("%d%d",&bl,&chn);
scanf("%d%d%d",&a,&b,&c);
bd[a][b]=c;
scanf("%d%d%d",&a,&b,&c);
bd[a][b]=c;
for(int i=1;i<=chn;i++){
scanf("%d%d%d",&a,&b,&c);
for(int j=1;j<=bl;j++)
for(int k=1;k<=bl;k++)
bef[j][k]=bd[j][k];
// puts("============================");
// pour();
switch(a){
case Up:// cout<<"---------Up------------"<<endl;
tou();
break;
case Down:// cout<<"--------Down------"<<endl;
tod();
break;
case Left://cout<<"----------Left--------"<<endl;
tol();
break;
case Right: //cout<<"----------Right-----------"<<endl;
tor();
break;
default:puts("Wrong Input");
}
// pour();
for(int j=1;j<=bl;j++)
for(int k=1;k<=bl;k++)
aft[j][k]=bd[j][k];
if(!check())break;
legal++;
make_new(b,c);
}
printf("%d\n%lld\n",legal,sco);
}

T2

终于让我用树状数组维护了一回$dp$

树状数组太棒辣!

××话说我刚开始颓了半天如何维护区间最值。(话说我只要前后缀……)

不过我都打了点了不如放在这……

#define N 111111
int pre[N];
inline int lowbit(int x){return x&(-x);}
void chan(int pos,int val){//修值
while(pos<=pn){
pre[pos]=val;
int ppos=lowbit(pos);
for(int i=1;i<ppos;i<<=1)
ch[x]=max(ch[x],ch[x-i]);
pos+=lowbit(pos);
}
}
int maxn(int l,int r){//查值
int res=0;
while(l<=r){
res=max(pre[r],res);
r--;
for(;r-lowbit(r)>=l;r-=lowbit(r))
res=max(pre[r],res);
}
return res;
}

然后才是正解$qwq$

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#define N 111111
#define LF double using namespace std; int nn,vn,arr[N],val[N];
LF pre[N],aft[N];
LF szsz[N],ans;
inline int fvind(int v){return lower_bound(val+1,val+vn+1,v)-val;}
inline int lowbit(int x){return x&(-x);}
void add(int pos,LF va){
while(pos<=nn){
szsz[pos]=max(szsz[pos],va);
pos+=lowbit(pos);
}
}
LF query(int pos){
LF res=0;
while(pos){
res=max(res,szsz[pos]);
pos-=lowbit(pos);
}
return res;
}
int main(){
scanf("%d",&nn);
for(int i=1;i<=nn;i++){
scanf("%d",arr+i);
val[i]=arr[i];
}
sort(val+1,val+nn+1);
vn=unique(val+1,val+nn+1)-val-1;
for(int i=1;i<=nn;i++)
arr[i]=fvind(arr[i]);
for(int i=1;i<=nn;i++){
pre[i]=query(arr[i]-1)+val[arr[i]];
add(arr[i],pre[i]);
}
memset(szsz,0,sizeof szsz);
for(int i=nn;i>=1;i--){
aft[i]=query(arr[i]-1)+val[arr[i]];
add(arr[i],aft[i]);
}
for(int i=1;i<=nn;i++){
// cout<<pre[i]<<" "<<aft[i]<<endl;
ans=max(ans,pre[i]);
// ans=max(ans,aft[i]);
ans=max(ans,(pre[i]+aft[i]-val[arr[i]])/2.0);
}
printf("%.3lf\n",ans);
}

T3

打法一:

随机化

打法二:

随机化

打法三:

随机化

打法四:

随机化

打法五:

枚举斜率直接把每个复数看成向量投影在斜率方向,最后搞一搞。$(gugugu)$

19.10.14-Q的更多相关文章

  1. Java每日一面(Part1:计算机网络)[19/10/14]

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 1.1 说一说TCP的四次挥手 ​ "挥手",即终止TCP连接,断开一个TCP连接池. ​ 需要客户端和服务端总共发出四个包,以 ...

  2. Ubuntu 19.10 安装 jupyter

    安装pip3 ubuntu 19.10 已经没有python了,取代的是python3. 执行sudo apt install python3-pip安装pip3 安装jupyter 执行sudo p ...

  3. 程序员的 Ubuntu 19.10 配置与优化指南

    原文地址:程序员的 Ubuntu 19.10 配置与优化指南 0x00 环境 CPU: Intel Core i9-9900k GPU: GeForce RTX 2070 SUPER RAM: DDR ...

  4. 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画

    [源码下载] 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画 作者:webabcd 介绍背水一战 Windows 10 之 动画 线性动画 - ColorAnimatio ...

  5. Thinkpad W520 + Ubuntu 12.04LTS, 13.10, 14.04LTS安装Nvidia显卡驱动设置

    Thinkpad W520 + Ubuntu 12.04LTS, 13.10, 14.04LTS安装Nvidia显卡驱动设置 http://henzhai.com/tech/2012/07/w520- ...

  6. macOS 10.14虚拟机安装教程

    windows10下安装vmware14.0以及macOS 10.14图文详解 工具/原料   windows10 vmware 14.0 macOS 10.14懒人版 mac补丁unlocker工具 ...

  7. OS + macOS Mojave 10.14.4 / sushi / ssh-keygen / ssh-copy-id

    s 系统版本: macOS 10.14.4 (18E226) 内核版本: Darwin 18.5.0 型号名称: Mac mini 2014 型号标识符: Macmini7,1 处理器名称: Inte ...

  8. VMware15安装MAC(MAC OS 10.13)(OS X 10.14)原版可升级最新可解锁macOS Unlocker3.0(OS X 10.13)

      目录树 1.1.2安装环境: 1.1.3所需资源: 1.1.4 Unlocker 3.0解锁 1.1.5 配置环境 1.1.6开始安装 1.1.7开启虚拟机进入MAC安装界面 1.1.8 macO ...

  9. APPLE-SA-2019-3-25-2 macOS Mojave 10.14.4,Security Update 2019-002 High Sierra, Security Update 2019-002 Sierra

    APPLE-SA-2019-3-25-2 macOS Mojave 10.14.4, Security Update2019-002 High Sierra, Security Update 2019 ...

  10. VMWare 14.1 15 Pro 安装 macOS Mojave 10.14.1系统 遇到的问题解决方案

    安装环境 WIN10VMware Workstation Pro 15.0.0 Build 10134415工具准备1.VMware Workstation Pro 15.0.0 Build 1013 ...

随机推荐

  1. TopCoder代码格式模板

    $BEGINCUT$ $PROBLEMDESC$ $ENDCUT$ #include<bits/stdc++.h> using namespace std; class $CLASSNAM ...

  2. MFC打开/保存文件对话框:CFileDialog

    MFC打开/保存文件对话框:CFileDialog CFileDialog   文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下: CFileDialog::CFileDial ...

  3. AutoLayout(自动布局)入门

    这是WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里.如果您是首次来到本站,也许您会有兴趣通过RSS的方式订阅本站. AutoLayout在去年的WWDC上被引入Cocoa,而在今年的WW ...

  4. Linux和Windows下ping命令详解

    转:http://linux.chinaitlab.com/command/829332.html 一.Linux下的ping参数 用途 发送一个回送信号请求给网络主机. 语法 ping [ -d] ...

  5. K最近邻(KNN,k-Nearest Neighbor)准确理解

    K最近邻(KNN,k-Nearest Neighbor)准确理解 用了之后,发现我用的都是1NN,所以查阅了一下相关文献,才对KNN理解正确了,真是丢人了. 下图中,绿色圆要被决定赋予哪个类,是红色三 ...

  6. node环境下安装vue-cli

    一. node安装 1)如果不确定自己是否安装了node,可以在命令行工具内执行: node -v  (检查一下 版本): 2)如果 执行结果显示: xx 不是内部命令,说明你还没有安装node , ...

  7. ssm项目中使用拦截器加上不生效解决方案

    在很多时候,需要拦截器来帮助我们完成一些特定的工作,比如获取请求的参数,本身在request这种获取数据就是一次磁盘的io, 如果在filter中获取了参数,那么在controller中就不能获取相关 ...

  8. hadoop 环境下不知道yarn端口可以通过此命令查找

    yarn jar hadoop-examples-2.6.0-mr1-cdh5.10.0.jar pi 1 30 hadoop-examples-2.6.0-mr1-cdh5.10.0.jar 此JA ...

  9. springAop的使用

    AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用org.aspectj.lang.ProceedingJoinPoint表示连接点 ...

  10. C++ 系列:static

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用.一.面向过程设计中的sta ...