清北刷题冲刺 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次方,则这个数就是立方 ...
随机推荐
- POJ1363 Rails 验证出栈序列问题
题目地址: http://poj.org/problem?id=1363 此题只需验证是否为合法的出栈序列. 有两个思路: 1.每个已出栈之后的数且小于此数的数都必须按降序排列.复杂度O(n^2),适 ...
- 关于MFC消息的总结
一.MFC的消息类型 MFC的消息类型大致可以分为三种: 1.命令消息.由菜单和工具栏或快捷键产生,以WM_COMMAND形式发出(以WM_COMMAND发出的还有很多控件,如Button等,但它们产 ...
- SQL的CASE表达式用法
case 表达式从SQL-92标准开始引入,因此是不依赖于具体的数据库技术,可提高SQL代码的可移植性. case表达式注意事项: 1. 统一各个分支返回数据类型,并保证各个when字句的排他性,因为 ...
- python实现列队
1 列队定义 队列是项的有序结合,其中添加新项的一端称为队尾,移除项的一端称为队首.当一个元素从队尾进入队列时,一直向队首移动,直到它成为下一个需要移除的元素为止. 最近添加的元素必须在队尾等待.集合 ...
- resin启动时报错com.caucho.config.LineConfigException的解决
resin启动时报以下错误: [13:32:10.120] {main} WEB-INF/web.xml:42: 'listener-class' is an unknown property of ...
- C++之this指针与另一种“多态”
一.引入 定义一个类的对象,首先系统已经给这个对象分配了空间,然后会调用构造函数(说明:假设存在构造函数--2010.9.5修正). 一个类有多个对象,当程序中调用对象的某个函数时,有可能要访问到这个 ...
- 基于v4l2 ffmpeg x264的视频远程监控(附上编译好的库文件)
说明:主要是基于ghostyu网友整理的< arm mini2440 基于v4l2 ffmpeg x264的视频远程监控>.自己做了一遍,遇到不少问题,就整理记录下来. 1.平台 硬件:a ...
- Agc017_D Game on Tree
传送门 题目大意 给定一棵树,$1$号节点为根,两个人轮流操作,每次选择一个根节点外的点,删掉它以及它的子树,不能操作者输,求两人均采用最优策略下先手胜利还是后手胜利. 题解 经典问题树上删边游戏,根 ...
- noip模拟赛Bywzj52501 17.10.18
T1 rob 环形消灭虫子 先想出了一个n^2暴力 然后我们想到 如果从两个连续的点求解 则会出现仅有的两种结果 (因为这两种情况的交是全集) 当时因为Naive求了50次 #include<i ...
- 1030 Travel Plan (30)(30 分)
A traveler's map gives the distances between cities along the highways, together with the cost of ea ...