清北刷题冲刺 10-29 a.m
遭遇
/*
因为选的楼是个集合,与顺序无关
而且总花费=c[1]+c[2]+c[3]+|h[1]-h[2]|+|h[2]-h[3]|
我们规定走的顺序从高到低,那么绝对值就可以去掉
所以就可以约掉中间的
枚举起点终点就行了
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#define maxn 51
using namespace std;
int n,t,Ans;
struct node{
int c,h;
bool operator < (const node b)const{
return c<b.c;
}
}q[maxn];
int main(){
freopen("meet.in","r",stdin);freopen("meet.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&q[i].c);
for(int i=;i<=n;i++)scanf("%d",&q[i].h);
scanf("%d",&t);
sort(q+,q+n+);
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){//枚举起点和终点
int now=t;
int mx=max(q[i].h,q[j].h),mn=min(q[i].h,q[j].h);
now-=abs(q[i].h-q[j].h)+q[i].c+q[j].c;
if(now<)continue;
int ans=;
for(int k=;k<=n;k++){
if(k==i||k==j||q[k].h>mx||q[k].h<mn)continue;
if(now-q[k].c<)continue;
now-=q[k].c;ans++;
}
Ans=max(Ans,ans);
}
}
if(Ans==&&q[].c<=t)Ans=;
printf("%d",Ans);
}
/*
10
19076 5807 413 6068 16699 28657 21980 12842 1668 21332
15929 15552 10742 29857 14248 14255 1464 29941 4132 25874
60081
*/
100分
都市
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mod 47680453
using namespace std;
int n,s,a[],q[],q1[],b[],nn;
struct node{
int x1,x2,x3,x4,x5;
}ans[]; bool vis[];
int has(){
int res=;
for(int i=;i<=n;i++){
res=(res*+q1[i])%mod;
}
return res;
}
void check(){
int t=;
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
b[++t]=q[i]+q[j];
}
}
sort(b+,b+nn+);
for(int i=;i<=nn;i++){
if(b[i]!=a[i])return;
}
for(int i=;i<=n;i++)q1[i]=q[i];
sort(q1+,q1+n+);
node now;now.x1=q1[];now.x2=q1[];now.x3=q1[];now.x4=q1[];now.x5=q1[];
int ha=has();
if(!vis[ha]){
vis[ha]=;
ans[++s]=now;
}
}
void dfs(int pos){
if(pos==n+){
check();
return;
}
for(int i=;i>=;i--){
q[pos]=i;
dfs(pos+);
}
}
bool cmp(node u,node v){
if(u.x1!=v.x1)return u.x1>v.x1;
if(u.x2!=v.x2)return u.x2>v.x2;
if(u.x3!=v.x3)return u.x3>v.x3;
if(u.x4!=v.x4)return u.x4>v.x4;
if(u.x5!=v.x5)return u.x5>v.x5;
}
int main(){
freopen("city.in","r",stdin);freopen("city.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d",&n);nn=n*(n-)/;
for(int i=;i<=nn;i++)scanf("%d",&a[i]);
sort(a+,a+nn+);
dfs();
printf("%d\n",s);
sort(ans+,ans+s+,cmp);
for(int i=;i<=s;i++){
if(n==)printf("%d %d %d %d %d\n",ans[i].x1,ans[i].x2,ans[i].x3,ans[i].x4,ans[i].x5);
if(n==)printf("%d %d %d %d\n",ans[i].x1,ans[i].x2,ans[i].x3,ans[i].x4);
if(n==)printf("%d %d %d\n",ans[i].x1,ans[i].x2,ans[i].x3);
if(n==)printf("%d %d\n",ans[i].x1,ans[i].x2);
if(n==)printf("%d\n",ans[i].x1);
}
return ;
}
30分 暴力
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 310
using namespace std;
int n,m,res[maxn],ans[maxn][maxn],z[maxn*maxn],cnt;
bool use[maxn*maxn];
void check(int p){
memset(use,,sizeof(use));
if((z[]+z[]+z[p])&)return;
res[]=(z[]+z[]+z[p])/-z[p];
res[]=z[]-res[];
res[]=z[]-res[];
use[]=use[]=use[p]=;
for(int i=,j=;i<=n;i++){
while(j<=m&&use[j])j++;
if(j>m)return;
res[i]=z[j]-res[];
use[j]=;
for(int k=;k<i;k++){
if(res[k]>res[i])return;
int v=res[k]+res[i];
int p=lower_bound(z+,z+m+,v)-z;
if(z[p]!=v)return;
int px=p;
while(px&&z[px]==z[p])px--;
px++;
while(px<=m&&z[px]==z[p]&&use[px])px++;
if(z[px]!=z[p]||use[px])return;
p=px;
use[p]=;
}
}
cnt++;
for(int i=;i<=n;i++)ans[cnt][i]=res[i];
}
int main(){
freopen("city.in","r",stdin);freopen("city.out","w",stdout);
scanf("%d",&n);m=n*(n-)/;
for(int i=;i<=m;i++)scanf("%d",&z[i]);
sort(z+,z+m+);
for(int i=;i<=m;){
check(i);
int j=i;
while(j<=m&&z[j]==z[i])j++;
i=j;
}
printf("%d\n",cnt);
for(int i=;i<=cnt;i++)
for(int j=;j<=n;j++){
printf("%d",ans[i][j]);
if(j==n)printf("\n");
else printf(" ");
}
return ;
}
100分
街灯
#include<iostream>
#include<cstdio>
#define maxn 100010
using namespace std;
int n,m,a[maxn];
struct node{
int l,r,p,v;
}q[maxn];
bool flag=;
int main(){
freopen("light.in","r",stdin);freopen("light.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=m;i++){
scanf("%d%d%d%d",&q[i].l,&q[i].r,&q[i].p,&q[i].v);
}
for(int i=;i<=m;i++){
int ans=;
for(int j=q[i].l;j<=q[i].r;j++){
if(a[j]%q[i].p==q[i].v)ans++;
}
printf("%d\n",ans);
}
}
30分 暴力
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100010
#define maxv 10000
using namespace std;
int n,m,a[maxn],vb[][],ve[][];
int xb[maxn],xe[maxn];
int i_buf[maxn**],tib;
void pre(){
memset(ve,,sizeof(ve));
memset(xe,,sizeof(xe));
for(int i=;i<=n;i++)xe[a[i]]++;
for(int i=;i<=maxv;i++){
xb[i]=tib;
tib+=xe[i];
xe[i]=xb[i];
}
for(int i=;i<=n;i++)i_buf[xe[a[i]]++]=i;
for(int m=;m<=;m++){
for(int i=;i<=n;i++)ve[m][a[i]%m]++;
for(int i=;i<m;i++){
vb[m][i]=tib;
tib+=ve[m][i];
ve[m][i]=vb[m][i];
}
for(int i=;i<=n;i++)
i_buf[ve[m][a[i]%m]++]=i;
}
}
int queryb(int l0,int r0,int p,int k){
if(vb[p][k]==ve[p][k])return ;
int *x1=lower_bound(i_buf+vb[p][k],i_buf+ve[p][k],l0);
int *x2=upper_bound(i_buf+vb[p][k],i_buf+ve[p][k],r0);
return x2-x1;
}
int querys(int v,int l0,int r0){
if(xb[v]==xe[v])return ;
int *x1=lower_bound(i_buf+xb[v],i_buf+xe[v],l0);
int *x2=lower_bound(i_buf+xb[v],i_buf+xe[v],r0);
return x2-x1;
}
int querya(int l0,int r0,int p,int k){
int ans=;
for(int i=k;i<=maxv;i+=p)ans+=querys(i,l0,r0);
return ans;
}
int main(){
freopen("light.in","r",stdin);freopen("light.out","w",stdout);
scanf("%d%d",&n,&m);
tib=;
for(int i=;i<=n;i++)scanf("%d",&a[i]);
pre();
while(m--){
int l,r,p,k;
scanf("%d%d%d%d",&l,&r,&p,&k);
if(p<=)printf("%d\n",queryb(l,r,p,k));
else printf("%d\n",queryb(l,r,p,k));
}
}
100分 分块+链表
预计得分100++
实际得分100++
三个题写的都不是正解,其中T1是化简式子之后胡邹的一个算法
T2T3都是暴力
这次模拟赛暴力虽然打的没什么技巧,但是不该丢的分都没有丢
小结
清北刷题冲刺 10-29 a.m的更多相关文章
- 清北刷题冲刺 10-30 a.m
星空 #include<iostream> #include<cstdio> using namespace std; int n,m; int main(){ freopen ...
- 清北刷题冲刺 10-28 p.m
水题(贪心) (water) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每 ...
- 2017-10-4 清北刷题冲刺班p.m
P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...
- 2017-10-4 清北刷题冲刺班a.m
P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...
- 2017-10-3 清北刷题冲刺班p.m
a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...
- 2017-10-3 清北刷题冲刺班a.m
P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...
- 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 ...
- 2017-10-1 清北刷题冲刺班p.m
一道图论好题 (graph) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...
- 清北刷题冲刺 11-03 a.m
纸牌 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
随机推荐
- mysql数据库更新
在使用mysql数据库的时候,A方使用一个版本,B方在使用一个版本数据库进行开发使用,B方在开发的时候,有新的需求,需要添加表字段和所需要的表.但是A方已经在使用之前的版本数据库并且数据库里面有真实的 ...
- Python with MYSQL - sytax problem
Con= MySQLdb.connect(host=',db='test') cur=Con.cursor() cur.execute('insert into staff_daily(Date,Na ...
- linux命令学习笔记(50):crontab命令
前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...
- 【二叉查找树】02不同的二叉查找树个数II【Unique Binary Search Trees II】
提到二叉查找树,就得想到二叉查找树的递归定义, 左子树的节点值都小于根节点,右子树的节点值都大于根节点. +++++++++++++++++++++++++++++++++++++++++++++++ ...
- Agc_006 E Rotate 3x3
题目大意 给定一个$3\times N$的方阵,每个位置的数恰好是每一个$[1,3\times N]$中的数. 初始时,每个位置$[x,y]$填的是$3(y-1)+x,(1\leq x\leq N,1 ...
- 记一次编译tensorflow-gpu爬过的坑
废话不多说,先说最终成功的版本:系统=>centos7 ,cuda=>10.0 ,cudnn=>7.5 ,nccl=>源码编译, tensorflow=>最新版本源码编译 ...
- 【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask
目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注 ...
- spring容器扩展功能之一:spring加载ApplicationContext.xml的四种方式
容器加载Bean的常见两个类ApplicationContext和BeanFactory, 一.首先,看看spring中加载配置在xml中的Bean对象到容器 spring 中加载xml配置文件的方式 ...
- js字符串API
1.charAt(n) :返回字符串n位置的字符 2.substr(n,m):n:开始截取的位置 m:截取的长度 2.substring(n,m):n:开始截取的位置 m:截取结束的位置 3.repl ...
- 杂项-Log:log4net
ylbtech-杂项-Log:log4net log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等) ...