官方题解:http://wyfcyx.is-programmer.com/posts/95490.html

A

  目前只会30分的暴力……DP好像很神的样子0.0(听说可以多次随机强行算?

 //Round2 A
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=;
/*******************template********************/
int n,m;
double a[][]; void work1(){
double ans=1.0;
F(i,,m) ans*=(1.0-a[][i]);
printf("%.9f\n",1.0-ans);
}
void work2(){
double ans=0.0;
F(i,,m) ans*=(1.0-a[][i]);
}
int mp[][],my[N];
bool vis[N];
long double ans=0.0,gailv=1.0; bool go(int x){
F(i,,m)
if (mp[x][i] && !vis[i]){
vis[i]=;
if (!my[i]||go(my[i])){
my[i]=x;
return ;
}
}
return ;
}
void check(){
// F(i,1,n){ F(j,1,m) printf("%d ",mp[i][j]); puts("");}
int tmp=;
memset(my,,sizeof my);
F(i,,n){
memset(vis,,sizeof vis);
if (go(i)) tmp++;
}
double gl=gailv;
// printf("%d %.9f\n\n",tmp,gl);
ans+=tmp*gailv;
}
void dfs(int x,int y){
// printf("dfs %d %d\n",x,y);
if (x==n+){check();return;}
D(i,,){
mp[x][y]=i;
gailv*=i*a[x][y]+(-i)*(1.0-a[x][y]);
if (y==m) dfs(x+,);
else dfs(x,y+);
mp[x][y]=;
gailv/=i*a[x][y]+(-i)*(1.0-a[x][y]);
}
}
void work3(){
dfs(,);
double as=ans;
printf("%.9f\n",as);
}
int main(){
#ifndef ONLINE_JUDGE
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
#endif
n=getint(); m=getint();
F(i,,n) F(j,,m) scanf("%lf",&a[i][j]);
if (n==) work1();
// else if (n==2) work2();
else
work3();
return ;
}

(30分)

C

  原来是用FFT来做的好题!

  第一步用KMP比较简单,容易想到。

  这题的特点是每个字符都是0或1,所以考虑第二步的时候,可以用FFT来进行快速运算0.0太神了!利用卷积的特点,将一个串反转过来,然后相同的,会对答案贡献1,不同的贡献0,卷积一下就是两个串对应位置都是1的位数!太神奇了。。。(都是0的位数求法:整个异或一下,0变1,1变0)

 //Round2 C
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=;
/*******************template********************/
const double pi=acos(-);
struct comp{
double r,i;
comp(double r=0.0,double i=0.0):r(r),i(i){}
comp operator * (const comp &b)const{return comp(r*b.r-i*b.i,r*b.i+i*b.r);}
comp operator + (const comp &b)const{return comp(r+b.r,i+b.i);}
comp operator - (const comp &b)const{return comp(r-b.r,i-b.i);}
}A[N],B[N]; int n,m,nxt[N],v[N],cnt,c[N],nn;
char a[N][],b[N][],a2[N],b2[N];
void FFT(comp *a,int n,int type){
for(int i=,j=;i<n;++i){
if (i<j) swap(a[i],a[j]);
for(int k=n>>;(j^=k)<k;k>>=);
}
for(int m=;m<n;m<<=){
double u=pi/m*type; comp wm(cos(u),sin(u));
for(int i=;i<n;i+=(m<<)){
comp w(,);
rep(j,m){
comp &A=a[i+j+m],&B=a[i+j],t=w*A;
A=B-t; B=B+t; w=w*wm;
}
}
}
if (type==-) rep(i,n) a[i].r/=n;
}
void KMP(){
nxt[]=nxt[]=;
int j=;
F(i,,m){
while(j!= && strcmp(b[i],b[j])!=) j=nxt[j];
nxt[i+]=strcmp(b[i],b[j])== ? ++j : ;
}
j=;
F(i,,n){
while(j!= && strcmp(a[i],b[j])!=) j=nxt[j];
if (strcmp(a[i],b[j])==) j++;
if (j==m+) v[++cnt]=i-m+;
}
}
void work(int x){
rep(i,nn) A[i]=B[i]=comp(,);
rep(i,n) if (a2[i+]-''==x) A[i].r=;
rep(i,m) if (b2[i+]-''==x) B[m-(i+)].r=;
FFT(A,nn,); FFT(B,nn,);
rep(i,nn) A[i]=A[i]*B[i];
FFT(A,nn,-);
rep(i,n) c[i+]+=(int)(A[i+m-].r+0.5);
} int main(){
#ifndef ONLINE_JUDGE
freopen("C.in","r",stdin);
freopen("C.out","w",stdout);
#endif
n=getint(); m=getint();
for(nn=;nn<n+m-;nn<<=);
F(i,,n){
scanf("%s",a[i]);
a2[i]=a[i][];
a[i][]='';
}
F(i,,m){
scanf("%s",b[i]);
b2[i]=b[i][];
b[i][]='';
}
KMP();
if (cnt) puts("Yes");
else {puts("No");return ;}
work();
work();
int ans1=1e9,ans2=;
F(i,,cnt) if (m-c[v[i]]<ans1){
ans1=m-c[v[i]]; ans2=v[i];
}
printf("%d %d\n",ans1,ans2);
return ;
}

【ContestHunter】【弱省胡策】【Round2】的更多相关文章

  1. 弱省胡策 Magic

    弱省胡策 Magic 求\(n\)个点\(n\)的条边的简单联通图的个数. 毒瘤,还要写高精. 我们枚举环的大小\(k\),\(\displaystyle ans=\sum_{k=3}^nC_n^k ...

  2. 【弱省胡策】Round #5 Count

    [弱省胡策]Round #5 Count 太神仙了. \(DP\)做法 设\(f_{n,m,d,k}\)表示\(n*m\)的矩阵,填入第\(k\)个颜色,并且第\(k\)个颜色最少的一列上有\(d\) ...

  3. luoguP3769 [CH弱省胡策R2]TATT

    luoguP3769 [CH弱省胡策R2]TATT PS:做这题前先切掉 P4148简单题,对于本人这样的juruo更助于理解,当然dalao就当练练手吧 题目大意: 现在有n个四维空间中的点,请求出 ...

  4. 【ContestHunter】【弱省胡策】【Round0】(A)&【Round1】(B)

    DP+容斥原理or补集转化?/KD-Tree 唔……突然发现最早打的两场(打的最烂的两场)没有写记录……(太烂所以不忍记录了吗... 还是把搞出来了的两道题记录一下吧= =勉强算弥补一下缺憾…… Ro ...

  5. 【ContestHunter】【弱省胡策】【Round3】(C)

    容斥原理+Fib Orz HE的神犇们 蒟蒻只能改出来第三题……实在太弱 官方题解:http://pan.baidu.com/s/1o6MdtQq fib的神奇性质……还有解密a[i]的过程……这里就 ...

  6. 【ContestHunter】【弱省胡策】【Round8】

    平衡树维护凸壳/三角函数+递推+线段树 官方题解:http://pan.baidu.com/s/1sjQbY8H 洛阳城里春光好 题目大意:(其实出题人已经写的很简短了……直接copy的-_-.sor ...

  7. 【ContestHunter】【弱省胡策】【Round7】

    Prufer序列+高精度+组合数学/DP+可持久化线段树 Magic 利用Prufer序列,我们考虑序列中每个点是第几个插进去的,再考虑环的连接方式,我们有$$ans=\sum_{K=3}^n N^{ ...

  8. 【ContestHunter】【弱省胡策】【Round6】

    KMP/DP+树链剖分+线段树/暴力 今天考的真是……大起大落…… String QwQ题意理解又出错了……(还是说一开始理解了,后来自己又忘了为什么是这样了?) 反正最后的结果就是……我当成:后面每 ...

  9. 【ContestHunter】【弱省胡策】【Round5】

    反演+FFT+构造+DP 写了这么多tag,其实我一个也不会 A 第一题是反演……数据范围10W,看着就有种要用FFT等神奇算法的感觉……然而蒟蒻并不会推公式,只好写了20+10分的暴力,然而特判30 ...

随机推荐

  1. html判断IE版本

    html判断IE版本 . <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> . <!--[if IE]> ...

  2. c# TextReader/TextWriter 的类

    TextReader以及TextWriter这两个类,非常有用,很多方法都接受它们作为参数. TextReader有两个子类: StringReader/StringWriter 用于读取字符串: S ...

  3. Win10下IIS配置图解、MVC项目发布图解、IIS添加网站图解

    Win10下IIS配置 .找到控制面板:[开始]菜单鼠标右击,打开[控制面板] .打开控制面板,点击[程序],点击[启用或关闭Windows功能] 下一步,点击[启用虎关闭Windows功能] . 开 ...

  4. Oracle之Linux下核心参数

    kernel.shmmax 用于定义单个共享内存段的最大值: 建议一个大的共享内存段能容纳整个SGA,这样在任何时候都不会有性能下降的隐患: 建议:32位Linux 物理内存大于4G 的设置为4G 即 ...

  5. Oracle 11g 之自动收集统计信息

    在Oracle的11g版本中提供了统计数据自动收集的功能.在部署安装11g Oracle软件过程中,其中有一个步骤便是提示是否启动这个功能(默认是启用这个功能). 1.查看自动收集统计信息的任务及状态 ...

  6. python ssh

    使用python包paramiko实现通过ssh的安全远程访问 使用pip下载安装paramiko,提示会缺一个crypto包,用pip将这个包也安好,python就可以正常引用paramiko了 一 ...

  7. 从0 开始 WPF MVVM 企业级框架实现与说明 ---- 第二讲 WPF中 绑定

    说到WPF, 当然得从绑定说起,这也是WPF做的很成功的一个地方,这也是现在大家伙都在抛弃使用winform的其中一个主要原因,Binding这个东西从早说到完其实都说不完的,我先就做一些基本的介绍, ...

  8. kettle过滤、生成随机数、改变开始复制数量

    下面是一个用Kettle实现数据过滤.生成随机数.改变开始复制数量的连贯示意图. 首先,我们将控件一一建立,通过hop建立连接 下面对每一个控件进行设置 1.生成随机数控件(随机取一个数字与字符串) ...

  9. poj 1564 Sum It Up

    题目连接 http://poj.org/problem?id=1564 Sum It Up Description Given a specified total t and a list of n ...

  10. android string.xml %问题

    反复检查后发现是string.xml中的 % 导致编译失败, 这是由于新的SDK采用了新版本的aapt(Android项目编译器),这个版本的aapt编译起来会比老版本更加的严格,然后在Android ...