内网比赛 后面几题自己看课本 一下题解为外网和内网前几题题解

A
这题需要考虑的问题是:该怎样放人、载人才能到达B地且时间最少,仔细想想,只用在某一个地方放人下去(就是说只用交换一次)。

现在的问题就变为了:该在哪个地方放人下去,带回终点,两人一起到终点,时间最少(首先车带一个人行驶一段距离然后丢下,折回找另外一个人,半路碰上,带回终点刚好与第一人共到B点)

这样问题就好解决了,设那个放下的点为x,那么就有:(s-x)/a=2*(2*x/(a+b)-x/b)+(s-x)/b

化简得:x=(b+a)*s/(b+3a)

既然放下的那个点已经确定好了,那么时间也简单了,时间为:x/b+(s-x)/a,(x/b)为那个点前一段所用的时间,[(s-x)/a]为那个点后一段所用的时间。

#include<bits/stdc++.h>
using namespace std;
int main(){double n, a, b;scanf("%lf%lf%lf", &n, &a, &b);double m = (b + a)/(b - a);double x = 2 * m + 1;double y = 2 * a * m + 2 * a + b;double t = x * n / y;printf("%.6f\n", t); return 0;
}

B

排序 设置两个指针 一个从头一个从尾部 向中间扫描 看有几种方案

#include <iostream>
#include <algorithm>
using namespace std;
#define mo 1000005
int a[mo];int main()
{int n,m;while(cin>>n>>m){for(int i=0;i<n;i++){cin>>a[i];}sort(a,a+n);int l=0,r=n-1;int ans=0;int sum=0,k=0;while(l<=r){ans=0;for(;r>l;r--){if(ans+a[r]<=m) ans+=a[r];else break;}for(;l<=r;l++){if(ans+a[l]<=m) ans+=a[l];else break;}sum+=m-ans;k++;}cout<<sum<<' '<<k<<endl;}
}

C
暴力搜索

#include<iostream>
#include<string>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
#include <cstdio>
using namespace std;
int d[10];
int tag[10];
int sum;
int dp[10000005];
void run()
{int x=0,y=0,z=0;for(int i=1;i<=9;i++){x=x*10+tag[i];y=0;for(int j=i+1;j<=9;j++){y=y*10+tag[j];z=0;//cout<<i<<' '<<j<<' '<<endl;if(j-i>=9-j&&j<9){for(int k=j+1;k<=9;k++){z=z*10+tag[k];}//cout<<x<<' '<<y<<' '<<z<<' '<<x<<' '<<y/z<<endl;if(z==0||y<z) continue;if(y%z==0) dp[x+y/z]++;}}}
}
void bfs(int t,int x,int s)
{tag[x]=s;if(t==9){run();//for(int i=1;i<=9;i++)cout<<tag[i]<<' ';cout<<endl;sum++;}for(int i=1;i<=9;i++){if(d[i]==0){d[i]=1;bfs(t+1,x+1,i);d[i]=0;}}
}int main()
{sum=0;bfs(0,0,0);//cout<<sum<<endl;int n;while(cin>>n){cout<<dp[n]<<endl;}
}

D

蛇形填数 变形
按照题意模拟即可

#include <iostream>
#include <cstring>
int a[1001][1001];
int main()
{int T,n;std::cin>>T;while(T--){std::memset(a,0,sizeof(a));std::cin>>n;if(n==1)std::cout<<"#\n";else if(n==2)std::cout<<"##\n# \n";else{int k=1,x=n-1,y=n,n1=n-3;for(int i=1;i<=n;i++)a[1][i]=a[i][1]=a[n][i]=1;while(n1--){if(k==1){while(true){a[x][y]=1;if(a[x-2][y]){k=2;break;}x--;}}else if(k==2){while(true){a[x][y]=1;if(a[x][y-2]){k=3;break;}y--;}}else if(k==3){while(true){a[x][y]=1;if(a[x+2][y]){k=4;break;}x++;}}else{while(true){a[x][y]=1;if(a[x][y+2]){k=1;break;}y++;}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)if(a[i][j])std::cout<<"#";else std::cout<<" ";std::cout<<std::endl;}}}
}

E
签到

#include <iostream>
#include <algorithm>
int main()
{int n,a[100000],k;std::cin>>n>>k;for(int i=0;i<n;i++)std::cin>>a[i];std::sort(a,a+n);for(int i=n-1;i>=0;i--){if(a[i]<k)break;std::cout<<a[i]<<std::endl;}
}

F
数论 找规律打表

#include <iostream>
#include <cmath>
struct aaa
{int a[1000],t=0,n=0;
}aa[10001];
int main()
{int k=3,n,t=1;aa[1].a[++aa[1].t]=0;std::cin>>n;for(int i=1;t<=n;i++){int g=t;++t;aa[t].a[++aa[t].t]=i;aa[t].n+=i;for(int j=1;j<=g;j++){++t;for(int k=1;k<=aa[j].t;k++)aa[t].a[k]=aa[j].a[k],aa[t].n=aa[j].n;aa[t].t=aa[j].t;aa[t].a[++aa[t].t]=i;aa[t].n+=i;}}long long s1=0;for(int i=1;i<=n;i++)s1+=aa[i].n;long long s=0;for(int i=1;i<=aa[n].t;i++)s+=std::pow(k,aa[n].a[i]);std::cout<<s<<" "<<s1<<std::endl;
}

G

线段树区间覆盖加区间加,两个zkw标记

#include<bits/stdc++.h>
using namespace std;
#define maxn 1000000
int add[maxn*5];
int sub[maxn*5];
void updata(int l,int r,int x,int y,int z,int in){if(z==1){if(sub[in]){add[in]=0;sub[in*2]=1;sub[in*2+1]=1;sub[in]=0;}}else{add[in*2]+=add[in];add[in*2+1]+=add[in];add[in]=0;}if(l==x&&r==y){if(z==1){add[in]++;}else{sub[in]=1;}return ;}int mid=(l+r)/2;if(x>mid){updata(mid+1,r,x,y,z,in*2+1);}else if(y<=mid){updata(l,mid,x,y,z,in*2);}else{updata(l,mid,x,mid,z,in*2);updata(mid+1,r,mid+1,y,z,in*2+1);}
}
int query(int l,int r,int in,int z){if(sub[z]) return 0;if(l==r){return add[z];}int mid=(l+r)/2;if(in<=mid){return add[z]+query(l,mid,in,z*2);}else{return add[z]+query(mid+1,r,in,z*2+1);}
}
int main(){int n,m;cin>>n>>m;memset(sub,0,sizeof(sub));memset(add,0,sizeof(add));for(int j=0;j<m;j++){int x,y,z;scanf("%d%d%d",&z,&x,&y);updata(1,n,x,y,z,1);}for(int j=1;j<=n;j++){cout<<query(1,n,j,1)<<endl;}}
/*
10 6
1 5 6
1 5 7
1 6 9
1 5 7
2 1 10
1 1 10
*/

H
2017 西安区域赛 原题

#include <iostream>
using namespace std;
int main()
{double a,b;cin>>a>>b;printf("%.1f",a/(a+b));
}

I
数论
百度就好

#include <iostream>
using namespace std;
int main()
{
int a,b;cin>>a>>b;cout<<a*b-a-b<<endl;
}

J
贪心

#include <stdio.h>
#include <string.h>
int main()
{int k,l,max,z;char s[105],ans[105];scanf("%s%d",s,&k);l = strlen(s);for(int i=0,q=-1;i<l-k;i++){max = 0;for(int j=q+1;j<=k+i;j++)if(max < s[j])max = s[j] , q = j;ans[i] = max;}ans[l-k] = '\0';puts(ans);return 0;
}

K (网络赛)
防ak
树链剖分+线段树zkw标记

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
struct aaa{long long x,y;}aa[1000001];
bool cmp(aaa A,aaa B){return A.x<B.x;}
long long d[100001],a1[100001],n,t1=0,t2=1,a2[100001],a3[100001],a4[100001],a5[100001];//d为子树长度,a1为辅助数组,a2为树链首节点,a3为节点所属树链,a4为节点对应序号
long long a[800004],b[800004],b1[400004],la[400004],lb[400004],s=0;
bool p[100001];
void dfs(long long v)
{d[v]=++t1;long long k1=(long long)(std::lower_bound(a1+2,a1+n+1,v)-a1),k2=(long long)(std::upper_bound(a1+2,a1+n+1,v)-a1);for(long long i=k1;i<k2;i++){if(p[aa[i].y])continue;p[aa[i].y]=1;dfs(aa[i].y);}d[v]=t1-d[v]+1;
}void shulian(long long v)
{long long k1=(long long)(std::lower_bound(a1+2,a1+n+1,v)-a1),k2=(long long)(std::upper_bound(a1+2,a1+n+1,v)-a1);a4[v]=++t1;if(!a2[t2])a2[t2]=v;a3[v]=t2;long long h=-1,h1=0;for(long long i=k1;i<k2;i++){if(p[aa[i].y])continue;if(d[aa[i].y]>h)h=d[aa[i].y],h1=aa[i].y;}if(h!=-1){p[h1]=1;shulian(h1);}for(long long i=k1;i<k2;i++){if(p[aa[i].y])continue;p[aa[i].y]=1;t2++;shulian(aa[i].y);}
}void xiugai(long long v,long long l,long long r,long long x,long long y,long long z,long long p1)
{//std::cout<<v<<" "<<l<<" "<<r<<" "<<x<<" "<<y<<" "<<z<<" "<<p1<<std::endl;long long mid=(l+r)/2;if(l!=r){b1[v*2]+=lb[v],lb[v*2]+=lb[v],a[v*2]+=a[v]+b[v*2]*la[v],la[v*2]+=la[v];b1[v*2+1]+=lb[v],lb[v*2+1]+=lb[v],a[v*2+1]+=a[v]+b[v*2+1]*la[v],la[v*2+1]+=la[v];la[v]=lb[v]=a[v]=0;}if(l==x&&y==r){if(p1==1)b[v]+=z,b1[v]+=z,lb[v]+=z;else if(p1==2)a[v]+=b1[v]*z,la[v]+=z;else s+=a[v];//std::cout<<a[v]<<" "<<b[v]<<std::endl;return;}if(mid>=y)xiugai(v*2,l,mid,x,y,z,p1);else if(mid<x)xiugai(v*2+1,mid+1,r,x,y,z,p1);else xiugai(v*2,l,mid,x,mid,z,p1),xiugai(v*2+1,mid+1,r,mid+1,y,z,p1);
}
int main()
{long long q,x,y,z;std::cin>>n;std::memset(d,0,sizeof(d));std::memset(p,0,sizeof(p));for(long long i=2;i<=n;i++){std::cin>>aa[i].x;aa[i].y=i;a5[i]=aa[i].x;}std::sort(aa+2,aa+1+n,cmp);for(long long i=2;i<=n;i++)a1[i]=aa[i].x;p[1]=1,dfs(1);std::memset(a2,0,sizeof(a2));std::memset(p,0,sizeof(p));p[1]=1,t1=0,shulian(1);//for(long long i=1;i<=n;i++)std::cout<<a4[i]<<std::endl;std::cin>>q;while(q--){std::cin>>z>>x>>y;while(true){if(a3[x]==1){xiugai(1,1,n,1,a4[x],y,z);break;}xiugai(1,1,n,a4[a2[a3[x]]],a4[x],y,z);x=a5[a2[a3[x]]];}//std::cout<<std::endl;}//for(long long i=1;i<=5;i++)std::cout<<a[i]<<" "<<b[i]<<std::endl;for(long long i=1;i<=n;i++)s=0,xiugai(1,1,n,a4[i],a4[i],0,0),std::cout<<s<<std::endl;
}

NYNU ACM 蓝桥杯选拔赛 解题报告相关推荐

  1. 【ICPC-61】2013第四届“蓝桥杯”预选赛 解题报告

                                                                                                       1 ...

  2. BUCTOJ - 2023上半年ACM蓝桥杯每周训练题-1-A~K题C++Python双语版

    文章目录 BUCTOJ - 2023上半年ACM&蓝桥杯每周训练题-1-A~K题C++Python双语版 前言 问题 A: 1.2 神奇兔子数列 题目描述 输入 输出 解题思路 AC代码 C+ ...

  3. 【蓝桥杯选拔赛真题17】Scratch金字塔 少儿编程scratch蓝桥杯选拔赛真题讲解

    目录 Scratch金字塔 一.题目要求 1.准备工作 2.编程实现 二.题目分析 1.角色分析 2.背景分析 3.准备工作 三.解题思路 1.流程分析 2.流程图绘制 四.程序编写 五.考点分析 六 ...

  4. QLU ACM 2018新生赛解题报告

    QLU ACM 2018 新生赛解题报告 A [1303]约数个数 题目描述 输入 输出 解析 B [1301]Alice and Bob 题目描述 输入 解析 C [1289] 黑白黑 题目描述 输 ...

  5. 【蓝桥杯选拔赛真题42】Scratch模拟画板 少儿编程scratch蓝桥杯选拔赛真题讲解

    目录 scratch模拟画板 一.题目要求 编程实现 二.案例分析 1.角色分析 2.背景分析 3.前期准备 三.解题思路 1.思路分析 2.详细过程 四.程序编写 五.考点分析 六.推荐资料 1.入 ...

  6. 软件学院蓝桥杯选拔赛

    前言 我感觉这次选拔赛选拔只是一方面,更重要的一方面是让大家当做一次练习,即使比赛发挥的不好,也不要灰心,距离蓝桥杯省赛还有3个多月时间,期间如果好好学习,多多练习,一定会有很大的提高,也一定会在比赛 ...

  7. CCW2021蓝桥杯选拔赛(一)

    总览 C - 云顶之弈! D - 签到啦! E - 栈! F - 数列的高度 G - 人潮汹涌 I - 乌鸦坐飞机! J - ICPC! K - 房子塌了! L - 小王蹬三轮 C - 云顶之弈! 最 ...

  8. pku acm 2248 addtion chians 解题报告

    acm  2248 给定n,找最小的序列. a0 = 1 am = n a0 < a1 < a2 ... < am 任意 ak = al1 + al2. l1 l2 可以相等 如 n ...

  9. Java 地下迷宫·算法·(ACM/蓝桥杯)·递归解法

    题目:小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅剩的体力值P跳出这个地下迷宫.为了让问题简单,假设这是一个n*m的格子迷宫,迷宫每个位置为0或者1,0代表这个位置有障碍物,小青蛙达到不了 ...

最新文章

  1. Exception in thread main java.lang.Error: Unresolved compilation problems 解决方案
  2. 什么是php工作流,什么是工作流?
  3. ionic3实战之—Radio传值
  4. [小北De编程手记] : Lesson 02 - Selenium For C# 之 核心对象
  5. 【面试必备】java面试题视频讲解
  6. Android开发用到的几种常用设计模式浅谈(一):组合模式
  7. 山石网科发布重磅容器安全产品“山石云铠”,云安全版图再下一城
  8. mysql not in优化_98%的人不知道的MySQL优化器原理
  9. V8 7.4释出!支持JIT-less不需可执行内存也能执行
  10. LINUX下DNS的查看和配置,Linux系统中查看和修改DNS配置的方法
  11. 交流电过零点检测电路总结
  12. 十年远景书计算机应用,写一篇十年愿景书
  13. 南水北调中线调水量仅占丹江口水库水量1/4
  14. char char* 的困惑
  15. [基础服务] [数据库] ClickHouse的安装和配置
  16. Google.com.hk 更名 Google 中国,谷歌已经不复存在?
  17. 艾默生质量流量计用于流量测量的作用意义
  18. buuctf_Misc-喵喵喵
  19. 让甲方爸爸看PDF格式的图纸,该测量长度?
  20. 【Rust】crates.io 更换国内上海交通大学源

热门文章

  1. MySQL——聚合函数和group by分组的使用
  2. 导致SSL证书出错的原因
  3. 损益类科目能说出几个?
  4. Cadence Orcad Allegro安装/阿狸狗破戒大师方法BY吴川斌
  5. [MODIS数据处理#8]批量将ET栅格的时间分辨率从8-day转换为monthly的一种思路
  6. 南理文字RPG Four
  7. 基于Rebound制造绚丽的动画效果-入门篇
  8. 记录Unity WebGL发布到IIS服务器时遇到的坑
  9. 第三章 信用/利息/利息率
  10. [内附完整源码和文档] 基于Java的商场促销活动信息管理系统