首先显然有多少个奇数,就有多少个回文串是最优的(没有奇数时构造一个回文串

然后有了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的更多相关文章

  1. 20160727noip模拟赛zld

    首先最优策略肯定是这样的:我们取出这个序列中的最大值,然后将整个序列分为左右两部分, 那么我们一定先把左右两部分合起来然后再与这个值合并 那么我们可以得出一个基于最值查询(rmq)的的算法,但是zld ...

  2. 20160730noip模拟赛zld

    codeforces394E 如果没有在凸多边形内一点的限制,答案肯定是 如果不在凸多边形内,那么目标点肯定在凸多边形边上,我们枚举每条边,在每条边上求出距离平方和最小的点,在这些点中求出最小的 我们 ...

  3. 20160728noip模拟赛zld

    前言:单独对题面描述的评分-> [题解]把相邻长度为2的子串两两连边,跑欧拉路 /*明天再写,先贴一份方老师代码压压惊*/ #include<map> #include<sta ...

  4. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  5. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  6. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  7. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  8. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  9. 小奇模拟赛9.13 by hzwer

    2015年9月13日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...

随机推荐

  1. 20140213-想念是while里的死循环

    // stdafx.h : 标准系统包含文件的包含文件,// 或是经常使用但不常更改的// 特定于项目的包含文件// #pragma once#include "targetver.h&qu ...

  2. OLE-Excel基本操作

    1.create object  obj   CREATE OBJECT EXCEL 'Excel.Application'. 这个obj通常指能够支持的应用程序 应用程序首先要满足OLE2的标准 同 ...

  3. linux服务器修改ftp默认21端口方法

    1.登录服务器,打开vsftp.conf文件 # vim /etc/vsftpd/vsftpd.conf 2.在文件末尾增加listen_port=8021 #remote_charset=CP125 ...

  4. PHP流程控制语句下

    ok,继续搞. while循环: while(expr){ 程序块: } 条件expr成立执行程序块,否则结束. do while循环:do while循环比while循环要多循环一次,它要先执行程序 ...

  5. 配置Windows 2008 R2 64位 Odoo 8.0/9.0 源码开发调试环境

    安装过程中,需要互联网连接下载python依赖库: 1.安装: Windows Server 2008 R2 x64标准版 2.安装: Python 2.7.10 amd64 到C:\Python27 ...

  6. Eclipse导入android包错误

    错误提示:Invalid project description… 解决方案:假设你的工作空间是workshop,那么你可以在你的workshop下新建一个文件夹,然后放入你的包,再在Eclipse中 ...

  7. GoldenGate单向复制配置示例

    一:环境介绍 --source端 ip地址:192.168.123.10 数据库版本:11.2.0.1.0 32 bit 操作系统版本:centos 4.5 32 bit ogg版本:fbo_ggs_ ...

  8. .NET书籍推荐

    任何语言的学习,要快速掌握,不在看书,而在实践.——题记 .NET技术从1.1发展到2.0,内核基本完善,从.NET 2.0开始学习是个明智的选择.而NET 3.5以及即将推出的.NET 4.0所新加 ...

  9. WPF 控件截图位置不正确的问题

    用WPF的RenderTargetBitmap可以截取控件内容到一张图片上,但是实际使用的时候经常出现截取的位置不正确的问题.今天是第二次解决这个问题,所以记录下,免得再忘了. RenderTarge ...

  10. Linux磁盘空间爆满,MySQL无法启动

    OS: Cent OS 6.3 DB: 5.5.14 看到一个帖子,在服务器上安装了oracle和mysql数据库,mysql数据库忘记开启innodb_file_per_table,导致插入测试数据 ...