纸牌

#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的更多相关文章

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

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

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

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

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

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

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

    轮换 #include<iostream> #include<cstdio> #include<cstring> #define maxn 1010 using n ...

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

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

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

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

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

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

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

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

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

    立方数 (cubic) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方 ...

随机推荐

  1. 并发问题引出ThreadLocal

    ThreadLocal Thread-->人类Runnable-->任务类 多线程并发问题引出ThreadLocal 多线程并发问题的原因: 操作同一个对象,对对象具有读写权限(只读如拍照 ...

  2. Cookie是以文本文件保存在客户端的,所以说cookie对象从本质而言是 字符串,所以取值时用字符串,或其数组

  3. MFC工程名称与所包含文件名称的关系(工程名可以更改,输出的.dll.exe.lib都以最后工程名命名为准)

    创建MFC应用程序时,可以规定MFC程序的工程名称,假设初始为MFCApp,则此后该应用程序的资源文件名称,继承自CWinApp的那个类,包括.def文件,.odl文件等都会以MFCApp打头. 但是 ...

  4. STL memory.cpp

    memory.cpp # // Filename: memory # # // Comment By: 凝霜 # // E-mail: mdl2009@vip.qq.com # // Blog: ht ...

  5. NodeJS中 Path 模块

    var path = require('path'); // 当发现有多个连续的斜杠时,会替换成一个: 当路径末尾包含斜杠时,会保留: // 在 Windows 系统会使用反斜杠. var p = p ...

  6. bzoj1002轮状病毒

    高精度练习题 根据什么什么基尔霍夫矩阵 反正就是高精度练习 #include<iostream> #include<cstdio> using namespace std; s ...

  7. boost::io_service解读

    boost::io_service解读 asio是boost提供的一个c++异步编程模型库,其核心类io_service,在多线程编程里面提供了任务队列和任务分发功能,在socket.io编程里主要作 ...

  8. SpringMvc之参数绑定注解详解之二

    2 consumes.produces 示例 cousumes的样例: 1 @Controller   2 @RequestMapping(value = "/pets", met ...

  9. ueditor1.4.3jsp版在上传图片报"未找到上传文件"解决方案

    这是因为struts2的过滤器,解决方法是自定义一个过滤器 新建一个过滤器的类,代码: package com.filter; import java.io.IOException; import j ...

  10. 牛叉之nc命令

    nc是一款很不错的网络检测工具,以下是详细使用. 'nc.exe -h'即可看到各参数的使用方法. 基本格式:nc [-options] hostname port [ports] - nc -l - ...