轮换

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1010
using namespace std;
int n,p,k,a[maxn],b[maxn],op[maxn][maxn],pos[maxn];
int main(){
freopen("rotate.in","r",stdin);freopen("rotate.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d%d%d",&n,&p,&k);
for(int i=;i<=n;i++)a[i]=i,b[i]=i;
for(int i=;i<=p;i++){
scanf("%d",&op[i][]);
for(int j=;j<=op[i][];j++)
scanf("%d",&op[i][j]);
}
for(int i=p;i>=;i--){
for(int j=;j<=op[i][];j++){
pos[j]=b[op[i][j]];
}
int w=op[i][];
for(int j=;j<=op[i][];j++){
int x=op[i][j],y=op[i][j+];
if(j==op[i][])y=w;
a[pos[j]]=y;
b[y]=pos[j];
}
}
for(int i=;i<=n;i++)printf("%d ",a[i]);
return ;
}

100分 模拟

区间

#include<iostream>
#include<cstdio>
#define mod 1000000007
using namespace std;
int val[];
int sum[];
int n,a,b,c,d,ans,q,w,e;
int qread(){
int i=;
char ch=getchar();
while(ch<''||ch>'') ch=getchar();
while(ch<=''&&ch>=''){i=i*+ch-'';ch=getchar();}
return i;
}
int main(){
freopen("range.in","r",stdin);freopen("range.out","w",stdout);
n=qread(),a=qread(),b=qread(),c=qread(),d=qread();
for(int i=;i<=n;i++){
val[i]=qread();
if(val[i]>=a&&val[i]<=b&&val[i]>=c&&val[i]<=d) ans++;
}
for(int i=;i<=n;i++){
w=e=val[i];
for(int j=i+;j<=n;j++){
w=w&val[j];e=e|val[j];
if(w<a||e>d) break;
if(w<=b&&e>=c) ans++;
}
while(ans>mod) ans-=mod;
}
cout<<ans;
}

60分 暴力

/*
3 2 2 3 3
2 3 3
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define mod 1000000007
#define maxn 100005
long long cnt;
int s[maxn],n,a,b,c,d,sta[maxn][],sto[maxn][];
using namespace std;
int aska(int l,int r){
int L=r-l+;
int t=log2(L);
return sta[l][t]&sta[r-(<<t)+][t];
}
int asko(int l,int r){
int L=r-l+;
int t=log2(L);
return sto[l][t]|sto[r-(<<t)+][t];
}
int main(){
freopen("range7.in","r",stdin);
scanf("%d%d%d%d%d",&n,&a,&b,&c,&d);
for(int i=;i<=n;i++){
scanf("%d",&s[i]);
sta[i][]=sto[i][]=s[i];
}
for(int j=;j<;j++)
for(int i=;i<=n;i++)
if(i+(<<j)-<=n){
sta[i][j]=sta[i][j-]&sta[i+(<<j-)][j-];
sto[i][j]=sto[i][j-]|sto[i+(<<j-)][j-];
}
for(int i=;i<=n;i++){
int andsum=s[i],orsum=s[i];
for(int j=i;j<=n;j++){
int L=j,R=n+;//二分右端点
andsum=aska(i,j);
orsum=asko(i,j);
while(R-L>){
int mid=(L+R)>>;
if(aska(i,mid)==andsum&&asko(i,mid)==orsum)L=mid;
else R=mid;
}
if(a<=andsum&&andsum<=b&&c<=orsum&&orsum<=d){
cnt+=L-j+;
}
j=L;
}
}
cout<<cnt%mod<<endl;
}

100分 枚举左端点+二分右端点+st表维护区间信息

收集果子

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1010
using namespace std;
int w[maxn],ans,fa[maxn],sz[maxn],n,k;
struct node{
int from,to;
}E[maxn];
int find(int x){
if(x==fa[x])return x;
return fa[x]=find(fa[x]);
}
void connect(int x,int y){
int f1=find(x),f2=find(y);
if(f1==f2)return;
fa[f2]=f1;
sz[f1]+=sz[f2];
sz[f2]=;
}
int main(){
freopen("fruit.in","r",stdin);freopen("fruit.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%d",&w[i]);
for(int i=;i<n;i++)scanf("%d%d",&E[i].from,&E[i].to);
int all=(<<(n-));
for(int i=;i<all;i++){
for(int j=;j<=n;j++)fa[j]=j,sz[j]=w[j];
int now=i,pos=;
while(now){
pos++;
if(now&){
connect(E[pos].from,E[pos].to);
}
now>>=;
}
if(sz[find()]==k)ans++;
}
cout<<ans;
return ;
}

30分 暴力

/*
从根节点向下递归求方案数,回溯的时候将叶子儿子节点方案数累加到根节点上
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mod 1000000007
#define maxn 1005
using namespace std;
int n,k,a[maxn],num,head[maxn];
long long pw2[maxn],dp[maxn][maxn];
struct node{int to,pre;}e[maxn*];
void Insert(int from,int to){
e[++num].to=to;
e[num].pre=head[from];
head[from]=num;
}
int dfs(int now,int father){
int sz=;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(to==father)continue;
for(int j=;j<=n-a[to];j++)
dp[to][j+a[to]]=dp[now][j];
int tmp=dfs(to,now);
for(int j=;j<=n;j++)
dp[now][j]=(pw2[tmp-]*dp[now][j]%mod+dp[to][j])%mod;
sz+=tmp;
}
return sz;
}
int main(){
freopen("fruit.in","r",stdin);
scanf("%d%d",&n,&k);
pw2[]=;
for(int i=;i<=n;i++)pw2[i]=pw2[i-]*%mod;
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=,x,y;i<n;i++){
scanf("%d%d",&x,&y);
Insert(x,y);Insert(x,y);
}
dp[][a[]]=;
dfs(,);
cout<<dp[][k];
return ;
}

100分 树形dp

预计得分100++
实际得分100++
T1一开始题意没懂,写完T2T3再看的,T1就是一个模拟,比较锻炼读题能力。T2看到位运算觉得有点蒙蔽,就直接暴力了,T3前30%的数据可以状态压缩搞一搞,写完发现最劣的情况是2^*,复杂度有可能过不去
今天状态不好,没集中精力做题,要培养善于调整的精神状态,积极投入考试

小结

清北刷题冲刺 11-01 p.m的更多相关文章

  1. 清北刷题冲刺 11-03 a.m

    纸牌 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  2. 2017-10-4 清北刷题冲刺班a.m

    P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...

  3. 2017-10-2 清北刷题冲刺班a.m

    一道图论神题 (god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...

  4. 2017-10-2 清北刷题冲刺班p.m

    最大值 (max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...

  5. 清北刷题冲刺 11-02 a.m

    卖书 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  6. 清北刷题冲刺 10-31 a.m

    集合 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; ], ...

  7. 清北刷题冲刺 10-30 a.m

    星空 #include<iostream> #include<cstdio> using namespace std; int n,m; int main(){ freopen ...

  8. 清北刷题冲刺 10-29 p.m

    洗澡 /* 这个题不能单纯判断左括号和右括号的多少,而应该从左到右扫一遍,看应该如何配对 */ #include<iostream> #include<cstdio> #inc ...

  9. 清北刷题冲刺 10-28 p.m

    水题(贪心) (water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每 ...

随机推荐

  1. iframe弹出层中关闭包含iframe的div(子页面调用父页面js函数)

    父页面: <div id="win2" style=" width:300px; height:200px; border:1px solid red;" ...

  2. tomcat警告:Setting property 'source' to 'org.eclipse.jst.j2ee.server:ServletPro' did not find a matching property

    警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclips ...

  3. python基础-变量

    1.什么是变量? 其实就是给数据起个名字而已.在python中你不想要关心数据类型,因为在你赋值的时候它已经自己帮你识别了 2.创建变量时候会在内存中开辟一个空间,具体的细节不需要咱们关心,解释器会分 ...

  4. C++中的前置和后置++

    在C++中进行操作符重载的时候,前置++返回的是一个引用. 这就设计到了对于基本变量进行前置操作时候的理解了. 例如,对于int类型变量,在进行前置++的时候,是会将i进行加1,然后返回i的引用.而i ...

  5. aac格式介绍

    AAC编码后数据打包到FLV很简单. 1. FLV音频Tag格式                              字节位置    意义0x08,                       ...

  6. 在Debug中使用断点调试程序

    我最近在学习汇编的程序,所以很多都需要动手写点代码去测试,如果是测试三五行代码的还比较简单,可以在debug中直接按T进行单步调试,但是到后来调试的代码越来越复杂,越来越长,如果再使用单步调试不知道要 ...

  7. 最常见的5个导致 RAC 实例崩溃的问题

    适用于: OracleDatabase - Enterprise Edition - 版本11.2.0.1 和更高版本本文档所含信息适用于所有平台 用途 本文档的目的是总结可能导致 RAC 实例崩溃的 ...

  8. git rebase小计(转)

    git rebase,顾名思义,就是重新定义(re)起点(base)的作用,即重新定义分支的版本库状态.要搞清楚这个东西,要先看看版本库状态切换的两种情况: 我们知道,在某个分支上,我们可以通过git ...

  9. java ----一个函数传回多个值的总结

    java 一个函数如何返回多个值 参考方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值的key是什么,只能通过doc或者通过源代码来查看. 2.传入一个引用进去,修改引用的属性值.问 ...

  10. SVN客户端下载和Svn visual studio插件

    1.Visual SVN Visual SVN visual studio插件 https://www.visualsvn.com/vis... 2.TortoiseSVN SVN客户端下载 http ...