20160729noip模拟赛zld

首先显然有多少个奇数,就有多少个回文串是最优的(没有奇数时构造一个回文串
然后有了k个“核心”,把剩下的字符顺序安排到这些的两侧,最后最短的回文串长度就是答案
#include<map>
#include<stack>
#include<queue>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<complex>
#include<iostream>
#include<assert.h>
#include<algorithm>
using namespace std;
#define inf 1001001001
#define infll 1001001001001001001LL
#define FOR(i,a,n) for(int (i)=a;(i)<=(n);++(i))
#define FOR1(i,n) for(int (i)=1;(i)<=(n);++(i))
#define ll long long
#define dbg(vari) cerr<<#vari<<" = "<<(vari)<<endl
#define gmax(a,b) (a)=max((a),(b))
#define gmin(a,b) (a)=min((a),(b))
#define ios0 ios_base::sync_with_stdio(0)
#define Ri register int
#define gc getchar()
#define il inline
il int read(){
bool f=true;
Ri x=;char ch;
while(!isdigit(ch=gc))if(ch=='-')f=false;
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=gc;}
return f?x:-x;
}
#define gi read()
#define FO(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
int n,a[];
int main(){
FO(palindromic);
int T=gi;
while(T--){
int cnt=,sum=;
n=gi;
FOR1(i,n){
a[i]=gi;sum+=a[i];
if(a[i]&)cnt++;
}
// printf("%d %d\n",cnt,sum);
if(cnt)
cout<<(sum-cnt)//cnt*+<<endl;
else cout<<sum<<endl;
}
return ;
}

上次做这题:20160430ysy出题的时候
首先任意两点的最短路只有两种情况:曼哈顿距离,曼哈顿距离+2
那么我们考虑怎样的点对曼哈顿距离会被影响
显然是下面这样的:黑色是障碍,红色和蓝点距离加2

那么我们分行列统计这样的对数,就可以(
//fyb
//旅行
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
typedef double ll;
ll tot;
ll gg;
int n,m;
char s[];
int row[],col[];
int fyb(int i,int j,int k){return *(i-)*(k-j);}
ll dorow(){
ll ans=;
for(int i=;i<n;i++)
for(int j=i+;j<=n;j++)
ans=ans+(m-(row[i]>))*(m-(row[j]>))*(j-i)/gg;
for (int i=;i<=n;i++)
if (row[i]){
ans=ans+fyb(row[i],row[i],m)/gg;
for(int j=i-;j>&&row[j]&&row[j]<row[j+];j--) ans=ans + fyb(row[j],row[i],m)/gg;
for(int j=i+;j<=n&&row[j]&&row[j]<row[j-];j++)ans=ans + fyb(row[j],row[i],m)/gg;
}
return ans;
}
ll docol(){
ll ans=;
for (int i=;i<m;i++)
for (int j=i+;j<=m;j++)
ans=ans+(n-(col[i]>))*(n-(col[j]>))*(j-i)/gg;
for (int i=;i<=m;i++)
if (col[i]){
ans=ans+fyb(col[i],col[i],n)/gg;
for(int j=i-;j>&&col[j]&&col[j]<col[j+];j--) ans= ans + fyb(col[j],col[i],n)/gg;
for(int j=i+;j<=m&&col[j]&&col[j]<col[j-];j++) ans=ans + fyb(col[j],col[i],n)/gg;
}
return ans;
}
int main(){
freopen("chess.in","r",stdin);
freopen("chess.out","w",stdout);
int T;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
tot=;memset(row,,sizeof(row));memset(col,,sizeof(col));
for (int i=;i<=n;i++){
scanf("%s",s);
for (int j=;j<m;j++)
if (s[j]=='G'){
tot++;
row[i]=j+;
col[j+]=i;
break;
}
}
gg=n*m-tot;
gg = gg * gg;
double gg2 = dorow() + docol();
gg2 = gg2 * 2.0;
printf("%.4lf\n", gg2);
}
return ;
}
(出现了玄学的换行

设定ans[i][j]
表示当前时刻,从i-j最早什么时候到达
首先我们发现,加上一条边只会影响这条边的起点出发的边和到达终点的边
那么我们反向加边,每次更新一些ans[i][j]
查询就变得简洁很多了。
#include<map>
#include<stack>
#include<queue>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<complex>
#include<iostream>
#include<assert.h>
#include<algorithm>
using namespace std;
#define inf 1001001001
#define infll 1001001001001001001LL
#define FOR0(i,n) for(int (i)=0;(i)<(n);++(i))
#define FOR1(i,n) for(int (i)=1;(i)<=(n);++(i))
#define ll long long
#define dbg(vari) cerr<<#vari<<" = "<<(vari)<<endl
#define gmax(a,b) (a)=max((a),(b))
#define gmin(a,b) (a)=min((a),(b))
#define ios0 ios_base::sync_with_stdio(0)
#define Ri register int
#define gc getchar()
#define il inline
il int read(){
bool f=true;
Ri x=;char ch;
while(!isdigit(ch=gc))if(ch=='-')f=false;
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=gc;}
return f?x:-x;
}
#define gi read()
#define FO(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
int n,m,q,u[],v[],ans[];
struct data{
int a,b,c,d,id;
void input(){
a=gi;b=gi;c=gi;d=gi;
}
}a[];
bool operator<(data a,data b){
return a.a<b.a;
}
int dis[][];
int main(){
FO(plan);
n=gi;m=gi;q=gi;
memset(dis,/,sizeof(dis));
FOR1(i,n) dis[i][i]=;
FOR1(i,m) u[i]=gi,v[i]=gi;
FOR1(i,q) a[i].input(),a[i].id=i;
sort(a+,a+q+);
int t=q;
for(int i=m;i>=;i--){
dis[u[i]][v[i]]=dis[v[i]][u[i]]=i;
for(int j=;j<=n;j++) dis[u[i]][j]=min(dis[u[i]][j],max(dis[v[i]][j],i));
for(int j=;j<=n;j++) dis[v[i]][j]=min(dis[v[i]][j],max(dis[u[i]][j],i));
while(t&&a[t].a==i){
if(dis[a[t].c][a[t].d]<=a[t].b)ans[a[t].id]=true;
--t;
}
}
for(int i=;i<=q;i++) if(ans[i]) puts("Yes"); else puts("No");
}
20160729noip模拟赛zld的更多相关文章
- 20160727noip模拟赛zld
首先最优策略肯定是这样的:我们取出这个序列中的最大值,然后将整个序列分为左右两部分, 那么我们一定先把左右两部分合起来然后再与这个值合并 那么我们可以得出一个基于最值查询(rmq)的的算法,但是zld ...
- 20160730noip模拟赛zld
codeforces394E 如果没有在凸多边形内一点的限制,答案肯定是 如果不在凸多边形内,那么目标点肯定在凸多边形边上,我们枚举每条边,在每条边上求出距离平方和最小的点,在这些点中求出最小的 我们 ...
- 20160728noip模拟赛zld
前言:单独对题面描述的评分-> [题解]把相邻长度为2的子串两两连边,跑欧拉路 /*明天再写,先贴一份方老师代码压压惊*/ #include<map> #include<sta ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOI模拟赛 Day1
[考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...
- NOIP第7场模拟赛题解
NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 小奇模拟赛9.13 by hzwer
2015年9月13日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...
随机推荐
- Facade模式和Mediator模式
相同的目的:把某种策略施加到另一组对象上. Facade从上面施加策略. 其使用是明显且受限的.当策略涉及范围广泛并且可见时. 约定的关注点.都同意使用Facade而不是隐藏于其下的对象. Media ...
- (转)一网打尽当下NoSQL类型、适用场景及使用公司
摘要:对比传统关系型数据库,NoSQL有着更为复杂的分类——键值.面向文档.列存储以及图数据库.这里就带你一览NoSQL各种类型的适用场景及一些知名公司的方案选择. 在过去几年,关系型数据库一直是数据 ...
- java虚拟机理解探索1
以下内容源于个人对<深入java虚拟机>的理解总结 基本概念: java虚拟机可以指一种抽象规范,也可以指一种具体实现,亦可以指一个java虚拟机实例. 虚拟机生命周期: 一个java虚拟 ...
- Android开发代码规范
目录 1.命名基本原则 2.命名基本规范 2.1编程基本命名规范 2.2分类命名规范 3.分类命名规范 3.1基本数据类型命名规范 3.2控件命名规范 3.3变量命名规范 3.4整个项目的目录规范化 ...
- 隐马尔科夫模型及Viterbi算法的应用
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4335810.html 一个例子: 韦小宝使用骰子进行游戏,他有两种骰子一种正常的骰子,还有一 ...
- Linux C 程序 GTK+图形界面编程(22)
GTK+图形界面编程 Linux大多是在字符界面,但也可以开发图形界面 目前已经存在多种Linux下开发图形界面的程序开发包:最常用的是Qt和GTK+ Qt是一个跨平台的图形界面开发库,不仅仅支持Li ...
- 【Qt】Qt之Tab键切换焦点顺序【转】
简介 Qt的窗口部件按用户的习惯来处理键盘焦点.也就是说,其出发点是用户的焦点能定向到任何一个窗口,或者窗口中任何一个部件. 焦点获取方式比较多,例如:鼠标点击.Tab键切换.快捷键.鼠标滚轮等. 习 ...
- Silverlight通过Wcf Data Service访问数据库之ADO.NET Entity Framework篇
- 【linux】学习笔记
2014.06.07 开机无法上网,每次都得 $ sudo ifconfig eth1 up $ sudo dhclient eth1 后面发现原来是网卡没设置开机启动 编辑/etc/sysconfi ...
- Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建教程
这篇文章主要介绍了Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建教程,需要的朋友可以参考下 准备篇 一.环境说明: 操作系统:Windows Server 201 ...