exam8.29
咕了好几篇后...
我终于开始重新写了
T1:
不会,没思路,暴搜还可能会(一开始我以为暴搜时间复杂度为$\Theta (mn ^ k)$)
于是码出了暴搜...
跑一遍$(4,4,5)$,然后...跑不出来!!!
输出了一下方案数,发现有问题
然后发现是$\Theta (k ^ {mn})$
于是我疯了,开始打表不要脸
$(4,4,5)$跑了1h没跑出来,放弃...然而没有这个点
考场代码:
#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
const int mod=1e9+7;
int a[6][6];
int n,m,k;
int ans[30];
void work()
{
int nans=0;
for(register int q=1;q<=n;qT1:>++)
for(register int w=1;w<=m;w++)
{
int bo=1;
for(register int e=1;e<=n;e++)
if(e!=q&&a[e][w]>=a[q][w])
{
bo=0;
break;
}
if(bo)
{
for(int e=1;e<=m;e++)
if(e!=w&&a[q][e]>=a[q][w])
{
bo=0;
break;
}
}
nans+=bo;
}
++ans[nans];
ans[nans]%=mod;
}
int cnt;
void dfs(int x,int y)
{
if(x==n&&y==m+1)
{
++cnt;
//cout<<cnt<<endl;
/*for(int q=1;q<=n;q++)
{
for(int w=1;w<=m;w++)
cout<<a[q][w]<<" ";
cout<<endl;
}
cout<<endl;*/
work();
return;
}
int res=y+1,tmp=x;
if(res==m+1&&x<n)
++tmp,res=1;
for(register int q=1;q<=k;q++)
a[x][y<
T1:
span class="pl-p">]=q,dfs(tmp,res);
}
signed main()
{
cin>>n>>m>>k;
if(n>m) n^=m,m^=n,n^=m;
if(n==4&&m==4&&k==3)
{
puts("20470320");
return 0;
}
if(n==3&&m==4&&k==4)
{
puts("13565952");
return 0;
}
if(n==4&&m==4&&k==4)
{
puts("330277355");
return 0;
}
if(n==3&&m==4&&k==5)
{
puts("243750000");
return 0;
}
if(n==3&&m==3&&k==5)
{
puts("1991250");
return 0;
}
dfs(1,1);
int nans=0;
forT1:s="pl-p">(int q=1;q<=n*m;q++)
nans=(nans+q*ans[q])%mod;
cout<<nans<<endl;
}
T2:
仍然不会
感觉暴力70分可以拿一下
手玩一下
dp可以做到$\Theta (mnq)$
考场代码:
#include<iostream>
#include<cstdio>
using namespace std;
int f[1005][1005];
int ans;
int a[1005][1005];
int main()
{
int n,m,qu;
cin>>n>>m>>qu;
for(int q=1;q<=n;q++)
{
for(int w=1;w<=m;w++)
{
char ch=getchar();
while(ch!='+'&&ch!='-') ch=getchar();
if(ch=='+')
a[q][w]=1;
else
a[q][w]=0;
}
}
for(int q=1,x,y;q<=qu;q++)
{
cin>>x>>y;
a[x][y]=0;
ans=0;
for(int w=1;w<=n;w++)
for(int e=1;e<=m;e++)
{
int res=min(f[w-1][e],f[w][e-1]);
f[w][e]=max(a[w][e],a[w][e]*(res+a[w-res][e-res]));
ans=max(ans,f[w][e]);
}
/*for(int w=1;w<=n;w++)
{
for(int e=1;e<=m;e++)
cout<<a[w][e];
cout<<endl;
}
cout<<endl;
for(int w=1;w<=n;w++)
{
for(int e=1;e<=m;e++)
cout<<f[w][e];
cout<<endl;
}
cout<<endl;*/
cout<<ans<<endl;
}
}
T3:
不会
n<=10枚举状态骗分
考场代码:
#include<iostream>
#include<cstdio>
using namespace std;
#define int long long
const int mod=1e9+7;
struct road{
int e,nt,bo;
}r[400005];
int nt[200005],tot=1;
int a[200005];
int ksm(int a,int k)
{
if(!a) return 0;
int ans=1;
while(k)
{
if(k&1)
ans=(ans*a)%mod;
a=(a*a)%mod,k>>=1;
}
return ans;
}
void add(int s,int e)
{
r[++tot].e=e;
r[tot].bo=0;
r[tot].nt=nt[s];
nt[s]=tot;
}
int n,k,p,pp;
int work(int k)
{
int tmp=1;
for(int q=0;q<n;q++)
if(!(k&(1<<q)))
tmp=(tmp*(p*ksm(pp,mod-2)%mod))%mod;
else
tmp=(tmp*((pp-p)*ksm(pp,mod-2)%mod))%mod;
return tmp;
}
int bo[200005];
int v[200005];
int dfs(int k)
{
v[k]=a[k];
bo[k]=1;
for(int q=nt[k];q;q=r[q].nt)
if(!bo[r[q].e])
v[k]+=dfs(r[q].e);
return v[k];
}
int getans1(int kk)
{
for(int q=1;q<=n;q++)
if(kk&(1<<(q-1)))
{
for(int w=nt[q];w;w=r[w].nt)
r[w].bo=r[w^1].bo=1;
bo[q]=1;
}
else
bo[q]=0;
int ans=0;
for(int q=1;q<=n;q++)
if(!bo[q])
ans=(ans+ksm(dfs(q),k))%mod;
for(int q=1;q<=n;q++)
if(kk&(1<<(q-1)))
for(int w=nt[q];w;w=r[w].nt)
r[w].bo=r[w^1].bo=1;
return ans;
}
int f[105];
int fs[105];
void pre()
{
fs[0]=1;
for(int q=1;q<=n;q++)
fs[q]=fs[q-1]*(p*ksm(pp,mod-2)%mod)%mod;
fs[0]=0;
}
int sum[105];
signed main()
{
cin>>n>>k>>p>>pp;
for(int q=1;q<=n;q++)
cin>>a[q];
for(int q=1,x,y;q<n;q++)
{
cin>>x>>y;
add(x,y);
add(y,x);
}
if(n<=10)
{
int ans=0;
for(int q=0;q<(1<<n);q++)
{
//cout<<q<<" "<<work(q)<<" "<<getans1(q)<<endl;
int k=work(q);
ans=(ans+getans1(q)*k)%mod;
}
cout<<ans<<endl;
}
if(n>50&&n<100000)
{
pre();
for(int q=1;q<=n;q++)
sum[q]=sum[q-1]+a[q];
cout<<fs[1]<<endl;
f[0]=1;
for(int q=1;q<=n+1;q++)
for(int w=0;w<q;w++)
f[q]=(f[q]+f[w]*fs[q-w-1]%mod*ksm((sum[q]-sum[w+1]),k)%mod)%mod;
cout<<f[n+1]<<endl;
}
}
exam8.29的更多相关文章
- IIC驱动移植在linux3.14.78上的实现和在linux2.6.29上实现对比(deep dive)
首先说明下为什么写这篇文章,网上有许多博客也是介绍I2C驱动在linux上移植的实现,但是笔者认为他们相当一部分没有分清所写的驱动时的驱动模型,是基于device tree, 还是基于传统的Platf ...
- CSharpGL(29)初步封装Texture和Framebuffer
+BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...
- DM9000驱动移植在mini2440(linux2.6.29)和FS4412(linux3.14.78)上的实现(deep dive)篇一
关于dm9000的驱动移植分为两篇,第一篇在mini2440上实现,基于linux2.6.29,也成功在在6410上移植了一遍,和2440非常类似,第二篇在fs4412(Cortex A9)上实现,基 ...
- 【hihoCoder】1148:2月29日
问题:http://hihocoder.com/problemset/problem/1148 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 思路: 1. 将问题转换成求两个日 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (29) ------ 第五章 加载实体和导航属性之过滤预先加载的实体集合和修改外键关联
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-13 过滤预先加载的实体集合 问题 你想过滤预先加载的实体集合,另外,你想使用 ...
- 背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox
[源码下载] 背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox 作者:webabcd ...
- 搭建 Windows Server 2003 + IIS6.0 + FastCGI + PHP5.3.29 + MySQL5.5.38 + Memcached1.2.6
一.下载相关软件: 1.VC9运行库 即VISUAL C++ 2008 自PHP5.3.0开始,PHP提供VC2008编译版,需要安装VC++ 2008的运行库. [微软官方下载] http://ww ...
- 将形如:Oct 8, 2016 5:29:44 PM串转换成正常时间在真机上遇到的坑
将形如:Oct 8, 2016 5:29:44 PM串转换成正常时间在真机上遇到的坑 /** * 根据传入字符串 * * @param str 传入的日期字符串 形如:Oct 8, 2016 5:29 ...
- proxifier 3.29 key
Proxifier 3.29 serial key :- [Use only One ] (Standard Edition Keys) 5EZ8G-C3WL5-B56YG-SCXM9-6QZA ...
随机推荐
- Linux文件和目录相关的命令
当前目录 . 上一层目录 .. tab键 自动补全 查看目录内容 ls 以.开头的都是隐藏文件需要用-a才能显示出来 ls通配符的使用 * 代表任意个数个字符 ...
- Filter讲解4
想要 浏览更多Fiddler内容:请点击进入Fiddler官方文档 阅读目录: 一.使用.NET代码扩展Fiddler 二.实现Fiddler接口 三.创建Fiddler扩展项目 四.在扩展程序选项卡 ...
- Vector、ArrayList异同和HTTP请求异同的概括和区别
今天我所记录的是两个异同的概括: HTTP: 同步请求:提交请求->等待服务器处理->处理完毕返回给客户端 这个期间客户端浏览器只能处于等待状态,得到回应才可以执行下一步操作. 异步请求 ...
- Selenium 调用IEDriverServer打开IE浏览器
Selenium 调用IEDriverServer打开IE浏览器 2016年03月30日 09:49:37 标签: selenium 14836 Selenium 调用IEDriverServer打开 ...
- Arm-Linux 移植 alsa
ref : https://www.cnblogs.com/yutingliuyl/p/6718875.html https://blog.csdn.net/yuanxinfei920/article ...
- Thread interrupted() 线程的中断
问题: 1.线程的中断方式. 2.为什么中断阻塞中的线程,会抛出异常. 代码示例: package com.hdwl.netty; public class ThreadInterrupted { p ...
- 怎样修改vim的缩进
默认vim的tab缩进是八个空格, 太长了, 需要改短一点. 第一步: 找到vimrc文件所在位置 # find / -name vimrc 第二步: 找到以后用vim打开vimrc文件并增加下面两行 ...
- GIL与线程进程小知识点
一 .GIL全局解释器 GIL是一个互斥锁:保证数据的安全(以牺牲效率来换取数据的安全)阻止同一个进程内多个线程同时执行(不能并行但是能够实现并发)并发:看起来像同时进行的GIL全局解释器存在的原因是 ...
- axios配置及使用(发起请求时带上token)
1.安装 利用npm安装 npm install axios --save 2.引入即可使用 import axios from 'axios' 3.目录 4.各个文件设置: (1)env.js ex ...
- vue函数化组件 functional
需要在组件中把functional 设置为true 一个函数化组件像这样: Vue.component('testcomponent', { functional: true, // 为了弥补缺少的实 ...