19.10.14-Q
小$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的更多相关文章
- Java每日一面(Part1:计算机网络)[19/10/14]
作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 1.1 说一说TCP的四次挥手 "挥手",即终止TCP连接,断开一个TCP连接池. 需要客户端和服务端总共发出四个包,以 ...
- Ubuntu 19.10 安装 jupyter
安装pip3 ubuntu 19.10 已经没有python了,取代的是python3. 执行sudo apt install python3-pip安装pip3 安装jupyter 执行sudo p ...
- 程序员的 Ubuntu 19.10 配置与优化指南
原文地址:程序员的 Ubuntu 19.10 配置与优化指南 0x00 环境 CPU: Intel Core i9-9900k GPU: GeForce RTX 2070 SUPER RAM: DDR ...
- 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画
[源码下载] 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画 作者:webabcd 介绍背水一战 Windows 10 之 动画 线性动画 - ColorAnimatio ...
- 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- ...
- macOS 10.14虚拟机安装教程
windows10下安装vmware14.0以及macOS 10.14图文详解 工具/原料 windows10 vmware 14.0 macOS 10.14懒人版 mac补丁unlocker工具 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- oracle将查询结果横转纵
SELECT '残疾人|民政|综合治理|计划生育|物业监管|安全生产|环境类|司法信访|党建|社会组织|文化体育|社保' D , '53|52|51|50|49|48|47|5|4|3|2|1' g ...
- js日常总结
1.html如何引入css和js文件 css:<link rel="stylesheet" href="css/index1.css(这是我的文件的地址)" ...
- inspect模块的使用
一.介绍 inspect模块主要的四种用处: 1.对是否是模块.框架.函数等进行类型检测 2.获取源码 3.获取类或函数的参数信息 4.解析堆栈 二.使用 只写了2个自己用到的方法,方法太用,http ...
- UASCO Cow Pedigrees /// oj10140
题目大意: 输入n,m :二叉树 输出 n个点分为m层 的方案数: 每个点的分支要么是0要么是2 Sample Input 5 3 Sample Output 2 即 两个方案为 O ...
- 查出当前操作数据库的登入名SUSER_NAME()
select SUSER_NAME() 一般和触发器一起用来监控是谁对表做了操作
- java笔试之自守数
自守数是指一个数的平方的尾数等于该数自身的自然数.例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376.请求出n以内的自守数的个数 接口说明 /*功能: 求出n以内的 ...
- Spark中使用Java编程的常用方法
原文引自:http://blog.sina.com.cn/s/blog_628cc2b70102w9up.html 一.初始化SparkContext System.setProperty(" ...
- mac os Catalina beta Jetbrains idea闪退解决方案
第一时间升级最新版本的Catalina 10.15 Beta 版(19A501i) 后, 发现不管在idea 输入什么,都会直接crash. 不论是卸载重装还是,clean,结果都是一样的. 在网上查 ...
- 连接 MySQL 报错:Lost connection to MySQL server at 'reading authorization packet', system error: 34
报错信息: Lost connection to MySQL server at 解决方案: use mysql; ; flush privileges; 参考: https://blog.csdn. ...
- Caffe系列2——Windows10制作LMDB数据详细过程(手把手教你制作LMDB)
Windows10制作LMDB详细教程 原创不易,转载请注明出处:https://www.cnblogs.com/xiaoboge/p/10678658.html 摘要: 当我们在使用Caffe做深度 ...