清北刷题冲刺 11-03 a.m
纸牌
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 300010
int n,a[maxn],b[maxn],w[maxn],num,h[maxn],cnt;
int qread(){
int i=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch<=''&&ch>='')i=i*+ch-'',ch=getchar();
return i;
}
struct node{
int x,y;
}q[maxn];
int find(int x){
int l=,r=cnt,res;
while(l<=r){
int mid=(l+r)>>;
if(h[mid]<=x)res=mid,l=mid+;
else r=mid-;
}
return res;
}
bool cmp(node u,node v){return u.x>v.x;}
int main(){
freopen("card.in","r",stdin);freopen("card.out","w",stdout);
// freopen("Cola.txt","r",stdin);
n=qread();
int limit=(n+)/;
for(int i=;i<=n;i++){
scanf("%d%d",&a[i],&b[i]);
w[++num]=a[i];
w[++num]=b[i];
}
sort(w+,w+num+);
h[++cnt]=w[];
for(int i=;i<=num;i++)
if(w[i]!=w[i-])h[++cnt]=w[i];
for(int i=;i<=n;i++){
int pos1=find(a[i]);
int pos2=find(b[i]);
q[pos1].x++;
q[pos2].y++;
}
sort(q+,q+cnt+,cmp);
int ans=;
for(int i=;i<=cnt;i++){
if(q[i].x+q[i].y<limit)continue;
else {
ans=max(,limit-q[i].x);
printf("%d",ans);
return ;
}
}
puts("Impossible");
return ;
}
40分 忘了纸牌正反相同的情况
后缀数组
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 50010
using namespace std;
int n,m,tr[maxn<<],cnt,b[maxn];
string ss;
struct node{
int id,rank;
string s;
}a[maxn];
bool cmp(node x,node y){return x.s<y.s;}
bool cmp1(node x,node y){return x.id<y.id;}
int query(int pos){
int res=;
while(pos){
res+=tr[pos];
pos-=pos&-pos;
}
return res;
}
void add(int pos){
while(pos<=n){
tr[pos]+=;
pos+=pos&-pos;
}
}
int main(){
// freopen("sort.in","r",stdin);freopen("sort.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&m);
cin>>ss;
for(int i=;i<=n;i++){
a[i].s=ss.substr(i-,min(m,n-i+));
a[i].id=i;
}
sort(a+,a+n+,cmp);
a[].rank=++cnt;
for(int i=;i<=n;i++){
if(a[i].s!=a[i-].s)
a[i].rank=++cnt;
else a[i].rank=a[i-].rank;
}
sort(a+,a+n+,cmp1);
long long ans=;
for(int i=;i<=n;i++){
ans+=query(n)-query(a[i].rank);
add(a[i].rank);
}
cout<<ans;
}
30分 树状数组,忘了字符串相等的情况
巧克力
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 11
using namespace std;
int T,n,m,k,w[maxn][maxn],a[],p[],cnt,b[],c[];
int qian[maxn];
bool flag,vis[];//是否wij=1;
int work1(){
for(int i=;i<=k;i++){
for(int j=;j<=cnt;j++){
while(a[i]%p[j]==)a[i]/=p[j];
if(p[j]>n&&p[j]>m)return ;
if(a[i]==)break;
}
}
return ;
}
void prepare(){
for(int i=;i<=;i++){
if(!vis[i])vis[i]=,p[++cnt]=i;
for(int j=;j<=cnt&&i*p[j]<=;j++){
vis[i*p[j]]=;
if(i%p[j]==)break;
}
}
}
int count(int sta){
int res=;
while(sta){
if(sta&)res++;
sta>>=;
}
return res;
}
int main(){
freopen("chocolate.in","r",stdin);freopen("chocolate.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d",&T);
prepare();
while(T--){
scanf("%d%d%d",&n,&m,&k);
flag=;
int sum=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
scanf("%d",&w[i][j]);
if(w[i][j]!=)flag=;
sum+=w[i][j];
}
int s=;
for(int i=;i<=k;i++){
scanf("%d",&a[i]);
s+=a[i];
}
sort(a+,a+k+);
if(s!=sum){
puts("no");
continue;
}
if(flag){
int ans=work1();
if(ans==)puts("no");
else puts("yes");
continue;
}
if(n==){
bool ok=;
for(int i=;i<=m;i++)qian[i]=qian[i-]+w[][i];
for(int sta=;sta<(<<m-);sta++){
if(count(sta)!=k-)continue;
int now=sta,pos=;
int tmp=;
while(now){
pos++;
if(now&)b[++tmp]=pos;
now>>=;
}
c[]=qian[b[]];
for(int j=;j<=tmp;j++){
c[j]=qian[b[j]]-qian[b[j-]];
}
c[k]=qian[m]-qian[b[k-]];
sort(c+,c+k+);
bool f=;
for(int j=;j<=k;j++){
if(c[j]!=a[j])f=;
}
if(f==){
puts("yes");
ok=;
break;
}
}
if(ok==)puts("no");
continue;
}
puts("yes");
}
}
20分 暴力
预计得分100++
实际得分40++
今天的题有很多坑,T1T2都掉坑里了,T3骗分策略有误
这次考试出了很多失误,以后一定要把情况考虑全面
小结
清北刷题冲刺 11-03 a.m的更多相关文章
- 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> ...
- 清北刷题冲刺 11-01 p.m
轮换 #include<iostream> #include<cstdio> #include<cstring> #define maxn 1010 using n ...
- 清北刷题冲刺 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张. 对于第一副牌的每 ...
- 清北刷题冲刺 10-28 a.m
立方数 (cubic) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方 ...
随机推荐
- codeforces 628B B. New Skateboard (数论)
B. New Skateboard time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- 【遍历二叉树】04二叉树的层次遍历【Binary Tree Level Order Traversal】
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树,返回他的层次遍历的 ...
- 小米5安装Xposed框架——需要解锁刷机
Xposed官网 https://forum.xda-developers.com/xposed 官方模块厂库 https://repo.xposed.info/ 中文站点 https://xpose ...
- Sqlite表结构读取工具,word批量转html,在线云剪贴板,文件批量提取工具;
工欲善其事必先利其器,本周为您推荐工具排行 Sqlite表结构读取工具,word批量转html,在线云剪贴板,文件批量提取工具: 本周我们又要发干货了,准备好接受了吗? 为什么是干货,就是因为 ...
- BZOJ4317: Atm的树+2051+2117
BZOJ4317: Atm的树+2051+2117 https://lydsy.com/JudgeOnline/problem.php?id=4317 分析: 二分答案之后就变成震波那道题了. 冷静一 ...
- P1030 求先序排列
题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入输出格式 输入格式: 2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序 ...
- mysql5.5主从同步复制配置
在上篇文章<烂泥:学习mysql数据库主从同步复制原理>中,我们介绍了有关mysql主从复制的基本原理.在这篇文章中,我们来实际测试下mysql5.5的主从同步复制功能. 注意mysql5 ...
- poj 1519 Digital Roots (计算根数字)
一.Description The digital root of a positive integer is found by summing the digits of the integer. ...
- 使用cmd命令行方式登录ftp上传下载数据
部分用户在使用ftp工具登录空间上传下载过程中经常会遇到各种问题,如主动模式,被动模式,以及其他导致无法登陆ftp .上传数据.下载数据的问题,这时候不妨使用一下命令行方式.命令行下可以避免很多由于f ...
- Java访问子类对象的实例变量
对于Java这种语言来说,一般来说,子类可以调用父类中的非private变量,但在一些特殊情况下, Java语言可以通过父类调用子类的变量 具体的还是请按下面的例子吧! package com.yon ...