清北刷题冲刺 11-01 p.m
轮换



#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的更多相关文章
- 清北刷题冲刺 11-03 a.m
纸牌 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- 2017-10-4 清北刷题冲刺班a.m
P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...
- 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 ...
- 清北刷题冲刺 11-02 a.m
卖书 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- 清北刷题冲刺 10-31 a.m
集合 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; ], ...
- 清北刷题冲刺 10-30 a.m
星空 #include<iostream> #include<cstdio> using namespace std; int n,m; int main(){ freopen ...
- 清北刷题冲刺 10-29 p.m
洗澡 /* 这个题不能单纯判断左括号和右括号的多少,而应该从左到右扫一遍,看应该如何配对 */ #include<iostream> #include<cstdio> #inc ...
- 清北刷题冲刺 10-28 p.m
水题(贪心) (water) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每 ...
随机推荐
- javaScript-基础篇(二)
1.DOM概念 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树) 将HTML代码 ...
- hdu-5635 LCP Array
LCP Array Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- Java中数学计算的相关方法
1:Math类 2.BigInteger类 3.BigDecimal类 BigInteger bi = new BigInteger("12433241123"); BigDec ...
- IO - 文件的读取与写入
最近有较多提取文档内容,然后拼接成sql之类的,但是纯粹的复制粘贴又太傻,就写了一个脚本,自动读取文件内容(word文档可能需要复制成txt文本),然后拼接sql,最后写入到指定文件中,试了下还是蛮好 ...
- bzoj2654tree
给定一个n个点m条边的图,每条边有黑白两色,求出恰好含need条白边的最小生成树 最小生成树...仿佛并没有什么dp的做法 大概还是个kruskal的板子再加点什么东西 考虑到“恰好含need条白边” ...
- Python 写文件时的Unicode设置
今天在把Evenote的笔记内容写为文件时出错: f.write(content) UnicodeEncodeError: 'gbk' codec can& ...
- 【转】 Pro Android学习笔记(五八):Preferences(2):CheckBoxPreference
目录(?)[-] CheckBox Preference xml文件 设备的存贮文件 复合preference 在ListPreference的例子中显示的是单选,如果是多选,可采用CheckBoxP ...
- web攻击之二:CSRF跨站域请求伪造
CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...
- redhat无法注册RHN的解决办法
1.问题 初学Linux,采用边实战nginx边学Linux命令的方式,这样学习的还快还真实一些.当然,问题来的很快.我使用的是redhat,安装pcre就出现了问题,如下: [root@localh ...
- python 基础 字典 增删改查
content = {"name":"wd","pc":{"phone":111111,"age": ...