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

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. Ubuntu 17 安装 tensorflow
  2. Python 处理字符串内置函数详解
  3. [react-router] React-Router的实现原理是什么?
  4. Linux实战案例(2)实例讲解使用软连接的场景和过程
  5. 函数:找出一句话中的第二个单词
  6. 【Android】7.5 RelativeLayout(相对布局)
  7. c++除法保留小数_BigDecimal 加减乘除、保留小位数
  8. 怎么让计算机唱歌视频教程,如何制作快手唱歌视频
  9. js对象写入键值对_js对象添加键值对
  10. python 3d绘图平面_python 利用matplotlib在3D空间中绘制平面的案例
  11. 十分钟掌握Google Guice(上)
  12. 环状序列|得分(UVa1584|UVa1585)
  13. html/css插入base64背景图片
  14. YYC松鼠短视频系统v3.5版本--稳定版本---优化性能以及各处接口返回以及部分ui页面细节
  15. Win10 DirectX 8.1 安装与启用
  16. 读论文(4)——FPN
  17. DirectShow SDK笔记【关于DirectShow(2)】
  18. 计算机网络期末大题汇总
  19. 终于等到你,FATE v1.6已更新,五大模块迎来巨幅优化!
  20. 【2021-01-29】JS逆向之shu美滑块参数分析

热门文章

  1. 双目视觉焦距_教你如何提高双目立体视觉系统的精度
  2. 教程丨使用MeterSphere进行场景化的接口测试
  3. Linux上如何使用微信?
  4. ADO.NET学习笔记
  5. 高校毕业生这样网络视频答辩!
  6. 如何成为一名黑客 from Eric Raymond
  7. 3个方面,解析趣头条的用户激励体系
  8. 【转载】数据挖掘中所需的概率论与数理统计知识
  9. 利用python绘制奥运五环_绘制奥运五环_清华尹成python入门教程_少儿编程视频-51CTO学院...
  10. BLE MESH中标准的Light Lightness messages的数据包格式