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)的飞船,按既定路线依次飞 ...
随机推荐
- UI4_UITableViewEdit
// // AppDelegate.m // UI4_UITableViewEdit // // Created by zhangxueming on 15/7/13. // Copyright (c ...
- UI4_UIToolBar
// // AppDelegate.m // UI4_UIToolBar // // Created by zhangxueming on 15/7/6. // Copyright (c) 2015年 ...
- Ajax 技术二
一.Ajax与XML案例 例:使用Ajax+XML读取数据表中的分类信息并放入下拉选框中 demo01.php 运行结果: 二.Ajax中的JSON 在Javascript中,可以通过两种方式(XML ...
- Android四大组件之一:Service(服务)
Service跟Activity也是出于统一级别的组件,且与Activity的最大区别之一主要是没有人机界面,主要是运行在程序的后台(我是这么理解的),帮助文档上说的是运行于进程的主线程中,但是服务并 ...
- ie8中使用placeholder
placeholder 是 html5 中的新属性,考虑到还有不少 ie8 的用户,所以找了一个 ie8 的 placeholder 的补丁,如下: <script type="tex ...
- java.util.Vector
public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, C ...
- setuid函数解析
在讨论这个setuid函数之前,我们首先要了解的一个东西就是内核为每个进程维护的三个UID值.这三个UID分别是实际用户ID(real uid).有效用户ID(effective uid).保存的设置 ...
- LVS-HA
heartbeat 监听在udp的694的端口 LRM:本地资源管理器 CRM:资源管理器 RA:资源代理(脚本) heartbeat legacy : heartbeat 传统类型的资源代理,通 ...
- DevExpress navBarControl 和 xtraTabbedMdiManager实现浏览器标签页效果
一:navBarControl 属性设置 工具箱中的Navigation & Layout选项卡下找到NavBarControl,拖到窗体中 工具箱中添加2个imageCollection.分 ...
- c#读写注册表示例分享
c#读写注册表示例,示例中有详细注释. 代码: //写注册表RegistryKey regWrite;//往HKEY_CURRENT_USER主键里的Software子键下写一个名为“Test”的子键 ...