清北刷题冲刺 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次方,则这个数就是立方 ...
随机推荐
- Python Panda - 学习笔记
#Group by Function df.groupby('Date')[['Date']].count() df.groupby('Date')[['Date']].sum() # if it c ...
- Python基础-MD5加密
import hashlibm = hashlib.md5()#构造一个md5 m.update(b"Hello")#加密前必须转化成二进制字节类型print(m.hexdiges ...
- vs参数配置
配置属性-常规: 输出目录:工程的输出目录,主要包括.exe..dll..lib文件,是工程最后想要的文件.vs2015位于解决方案的\x64\Debug下,vs2010,vs2005位于解决方案的D ...
- Convolutional Neural Networks for Visual Recognition 8
Convolutional Neural Networks (CNNs / ConvNets) 前面做了如此漫长的铺垫,现在终于来到了课程的重点.Convolutional Neural Networ ...
- 机器学习 Generative Learning Algorithm (A)
引言 前面几讲,我们主要探讨了如何对 p(y|x;θ) (即y 相对于x的条件概率)进行建模的几种学习算法,比如,logistic regression 对 p(y|x;θ) 进行建模的假设函数为 h ...
- 浅谈vue路由原理
Vue的路由实现:hash模式 和 history模式 hash模式:在浏览器中符号“#”,#以及#后面的字符称之为hash,用window.location.hash读取: 特点:hash虽然在UR ...
- Javascript常用的设计模式详解
Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...
- Linux编程里getopt_long_only函数用法详解
在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子.下面介绍使用getopt_long_only和getopt_long(两者用法差不多)解析命令行选项. 程序中主 ...
- linux日常管理-rsync后台服务方式-2
把本地的数据拷贝到远程 这里是个错误,read only.只允许读,不允许写. 改一下远程机器的配置文件 把read only改为no 拷贝到远程成功 tree一下远程机器的目录 ////////// ...
- linux命令-xz压缩
xz gzip bzip2使用方法基本一样 压缩文件 [root@wangshaojun ~]# xz 111.txt[root@wangshaojun ~]# ls //////111.txt文件 ...