2017-10-5 清北刷题冲刺班p.m
套路(拓扑排序)

/*
对每个联通块单独考虑。
每个联通块是一个环套树,树边拎出来可以随意定向,记树边为 m,所以树的方案数为2^m 。
对于环来说只有两种方向,顺时针和逆时针,记环边为 n,所以环的方案就是 2^n - 2。
最后把每个联通块的方案乘起来即可。
注意,自环无论如何定向都是环,但这并不违反环的公式,故可以不特判。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 200010
#define mod 1000000007
int con[maxn],deg[maxn],seq[maxn];
int n,m;
long long ans;
long long Pow(long long a,long long b){
long long res=;
while(b){
if(b&)res=res*a%mod;
a=a*a%mod;
b>>=;
}
return res;
}
void dfs(int x){
m++;
deg[x]=;
if(deg[con[x]])dfs(con[x]);
}
int main(){
freopen("road.in","r",stdin);freopen("road.out","w",stdout);
//freopen("Cola.txt","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&con[i]);
deg[con[i]]++;
}
int h=,t=;
for(int i=;i<=n;i++){
if(!deg[i])seq[++t]=i;
}
while(h<=t){
int to=con[seq[h]];
deg[to]--;
if(!deg[to])seq[++t]=to;
++h;
}
ans=Pow(,t);
for(int i=;i<=n;i++){
if(deg[i]){
m=;
dfs(i);
ans=(ans*(Pow(,m)-))%mod;
}
}
ans=(ans+mod)%mod;
cout<<ans;
}
100分 拓扑排序
exLCS(动态规划)


#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1000010
#define INF 0x7fffffff
using namespace std;
char a[],b[maxn];
int f[][],nxt[maxn][];
int n,m;
void solve(){
f[][]=nxt[][a[]-'a'];
for(int i=;i<=n;i++)f[i][]=-;
for(int i=;i<n-;i++)
for(int j=;j<=n&&f[i][j]<INF;j++){
f[i+][j]=min(f[i+][j],f[i][j]);
if(j<n)f[i+][j+]=min(f[i+][j+],nxt[f[i][j]+][a[i+]-'a']);
}
}
int main(){
freopen("lcs.in","r",stdin);freopen("lcs.out","w",stdout);
scanf("%s%s",a,b);
n=strlen(a);m=strlen(b);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
f[i][j]=INF;
for(int i=;i<;i++)nxt[m][i]=INF;
for(int i=m-;i>=;i--){
memcpy(nxt[i],nxt[i+],sizeof(nxt[i]));
nxt[i][b[i]-'a']=i;
}
solve();
int ans=;
for(int i=n;i;i--)
if(f[n-][i]<INF){
ans=i;
break;
}
cout<<ans;
}
100分 dp
魔方(模拟)


#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> int c[],n,flag=false,out[],ans; inline void read(int &now)
{
char Cget;now=;while((Cget=getchar())<''&&Cget>'');
while(Cget>=''&&Cget<='')now=now*+Cget-'',Cget=getchar();
} void operation_A()
{
int tmp,tmp2;
tmp=c[];
c[]=c[],c[]=c[],c[]=c[],c[]=tmp;
tmp=c[],tmp2=c[];
c[]=c[],c[]=c[],c[]=c[],c[]=c[];
c[]=c[],c[]=c[],c[]=tmp2,c[]=tmp;
} void operation_B()
{
int tmp,tmp2;
tmp=c[];
c[]=c[],c[]=c[],c[]=c[],c[]=tmp;
tmp=c[],tmp2=c[];
c[]=c[],c[]=c[],c[]=c[],c[]=c[];
c[]=c[],c[]=c[],c[]=tmp2,c[]=tmp;
} void operation_C()
{
int tmp=c[],tmp2;
c[]=c[],c[]=c[],c[]=c[],c[]=tmp;
tmp=c[],tmp2=c[];
c[]=c[],c[]=c[],c[]=c[],c[]=c[];
c[]=c[],c[]=c[],c[]=tmp,c[]=tmp2;
} bool check()
{
return c[]==c[]&&c[]==c[]&&c[]==c[]&&
c[]==c[]&&c[]==c[]&&c[]==c[]&&
c[]==c[]&&c[]==c[]&&c[]==c[]&&
c[]==c[]&&c[]==c[]&&c[]==c[]&&
c[]==c[]&&c[]==c[]&&c[]==c[]&&
c[]==c[]&&c[]==c[]&&c[]==c[];
} void dfs(int now,int last)
{
if(check())
{
flag=true,ans=now;
return;
}
if(now>=n) return;
if(last!=)
{
for(int i=;i<=;i++)
{
operation_A();
out[now+]=i;
dfs(now+,);
if(flag) return;
}
operation_A();
}
if(last!=)
{
for(int i=;i<=;i++)
{
operation_B();
out[now+]=+i;
dfs(now+,);
if(flag) return;
}
operation_B();
}
if(last!=)
{
for(int i=;i<=;i++)
{
operation_C();
out[now+]=+i;
dfs(now+,);
if(flag) return;
}
operation_C();
}
} void dfs2(int now,int last)
{
if(check())
{
flag=true,ans=now;
return;
}
if(now>=n) return;
if(last!=)
{
for(int i=;i<=;i++)
{
operation_A();
out[now+]=i;
dfs(now+,);
if(flag) return;
}
operation_A();
}
if(last!=)
{
for(int i=;i<=;i++)
{
operation_B();
out[now+]=+i;
dfs(now+,);
if(flag) return;
}
operation_B();
}
} int main()
{
freopen("cube.in","r",stdin);
freopen("cube.out","w",stdout);
read(n);
for(int i=;i<=;i++) read(c[i]);
if(n<=)
{
dfs(,);
for(int i=;i<=ans;i++) printf("%d ",out[i]);
}
else
{
if(n<=) dfs2(,);
if(!flag) dfs(,);
for(int i=;i<=ans;i++) printf("%d ",out[i]);
}
fclose(stdin),fclose(stdout);
return ;
}
100分 模拟
2017-10-5 清北刷题冲刺班p.m的更多相关文章
- 2017-10-4 清北刷题冲刺班p.m
P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...
- 2017-10-4 清北刷题冲刺班a.m
P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...
- 2017-10-3 清北刷题冲刺班p.m
a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...
- 2017-10-3 清北刷题冲刺班a.m
P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...
- 2017-10-2 清北刷题冲刺班a.m
一道图论神题 (god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...
- 2017-10-2 清北刷题冲刺班p.m
最大值 (max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...
- 2017-10-1 清北刷题冲刺班p.m
一道图论好题 (graph) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...
- 2017-10-7 清北刷题冲刺班p.m
测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...
- 2017-10-7 清北刷题冲刺班a.m
测试 A 消失的数字 文件名 输入文件 输出文件 时间限制 空间限制del.cpp/c/pas del.in del.out 1s 512MB题目描述现在,我的手上有 n 个数字,分别是 a 1 ,a ...
- 2017-10-1 清北刷题冲刺班a.m
位运算1 (bit) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK拥有一个十进制的数N.它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥 ...
随机推荐
- Struts2 - ModelDriven 拦截器、Preparable 拦截器
开篇:拦截器在Struts中的作用 在我们的web.xml中,我们配置了一个过滤器,实现将所有请求交付StrutsPrepareAndExecuteFilter类.一旦接受到任意action的请求,该 ...
- BeanUtils介绍及使用
JavaBeans事实上有三层含义.首先,JavaBeans是一种规范,一种在Java(包括JSP)中可重复使用的Java组件的技术规范,也可以说成我们常说的接口.其次,JavaBeans是一个Jav ...
- 雅礼集训 2017 Day2 水箱 可并堆
题目描述 给出一个长度为 n 宽度为 1 ,高度无限的水箱,有 n−1 个挡板将其分为 n 个 1 - 1 的小格,然后向每个小格中注水,水如果超过挡板就会溢出到挡板的另一边,这里的水是满足物理定律 ...
- BZOJ5442: [Ceoi2018]Global warming
BZOJ5442: [Ceoi2018]Global warming https://lydsy.com/JudgeOnline/problem.php?id=5442 分析: 等价于后缀加(前缀减也 ...
- C#中如何获取一个二维数组的两维长度,即行数和列数?以及多维数组各个维度的长度?
如何获取二维数组中的元素个数呢? int[,] array = new int[,] {{1,2,3},{4,5,6},{7,8,9}};//定义一个3行3列的二维数组int row = array. ...
- CF1092 D & E —— 思路+单调栈,树的直径
题目:https://codeforces.com/contest/1092/problem/D1 https://codeforces.com/contest/1092/problem/D2 htt ...
- ElasticSearch logo 分布式搜索引擎 ElasticSearch
原文来自:http://www.oschina.net/p/elasticsearch Elastic Search 是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中 ...
- asp.net定时任务
我们这边使用的定时任务框架是Quartz.Net,可以实现异常灵活的定时任务,开发人员只要编写少量的代码就可以实现“每隔一小时执行”.每天22点执行,每月18日下午执行等等各种定时任务. Quartz ...
- flume 配置与使用
1.下载flume,解压到自建文件夹 2.修改flume-env.sh文件 在文件中添加JAVA_HOME 3.修改flume.conf 文件(原名好像不叫这个,我自己把模板名改了) 里面我自己配的( ...
- Spring之2:Spring Bean动态注册、删除
IoC容器的初始化包括BeanDefinition的Resource定位.载入和注册这三个基本的过程. 一.Resource定位.BeanDefinition的资源定位有resourceLoader通 ...