官方题解: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. group by和distinct语句的执行顺序

    同一条语句之中,如果同时有group by和distinct语句,是先group by后distinct,还是先distinct后group by呢? 先说结论:先group by后distinct. ...

  2. C++12!配对

    题目内容:找出输入数据中所有两两相乘的积为12!的对数. 输入描述:输入数据中含有一些整数n(1<=n<232). 输出描述:输出所有两两相乘的积为12!的对数. 题目分析:对于输入的每个 ...

  3. System.Transaction (TransactionScope) 与 可提升 (Promotable) 交易

    这是我的备份,原文请看  http://www.dotblogs.com.tw/mis2000lab/archive/2014/11/12/transactionscope_promotable_tr ...

  4. C#和.NET版本

    1999年,就听说微软公司在研发一种名为“cool”的新开发语言,而具体内幕一直是个谜,直到2000年6月26日微软在奥兰多举行的“职业开发人员技术大会”(PDC 2000)上,这个谜底终于揭晓了,这 ...

  5. Jquery制作可以绑定的表格

    //总页数 当前页 可见页 参数 翻页执行后处理的函数 function PageTable(totalPages, currentPage, tableobj, url, where, column ...

  6. Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架

    转载  转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23513993 本来准备下载个CSDN的客户端放手机上,没事可以浏览浏览资 ...

  7. [Prism框架实用分享]如何在主程序中合理的弹出子窗体

    大家好 说起子窗体,大家都会想到ChildWindow,多熟悉的一个控件.不错,Sliverlight中已经提供了子窗体的具体实现,而在WPF中却没有这么好的事情(有的第三方控件商已经提供此控件).最 ...

  8. 刀哥多线程笔记之gcd-02-block

    block 概念 block 是 C 语言的 是一种数据类型,可以当作参数传递 是一组预先准备好的代码,在需要的时候执行 动画 block 回顾 self.demoView.center = CGPo ...

  9. ANT编译build.xml

    一,体验ant就像每个语言都有HelloWorld一样,一个最简单的应用能让人感受一下Ant1,首先你要知道你要干什么,我现在想做的事情是:编写一些程序编译它们把它打包成jar包把他们放在应该放置的地 ...

  10. Android WIFI 启动流程

    参考:http://blog.chinaunix.net/uid-26215986-id-3260413.html 一. WIFI 工作步骤 1. Wifi模块初始化 2. Wifi启动 3. 查找热 ...