试题链接:http://www.accoders.com/contest.php?cid=1895    考试密码请私信;

特别鸣谢:zkc奆佬帮助我优化本篇题解(语言表达方面)

   T1

  显然二分求解的一道题,难度中等,但是会被疯狂卡精度

非常恶心,非常毒瘤

  思路:输入时维护一个前缀和数组,然后分别从前,后方向遍历,找最大最小值

,同时记录L,R,二分x,check函数中另起一个数组算一下'-x'后的数组然后,还是

从前后遍历,找最大最小值,记录l,r,最后判断L和R的大小是不是也符合l,r的大小

(就是L<R&&l<r||L>R&&l>r),然后疯狂卡精度即可

T1-

 #include <bits/stdc++.h>
using namespace std;
int a[];
double b[];
double c[];
double maxx,ans,tans,x,num;
int n,L,R=n+,bigg=-,small=;
inline bool check(double x){
double maxx=-,minn=;int l=,r=n+;
for(register int i=;i<=n;i++){
if(L<R) c[i]=b[i]-x*(i*1.0);
else c[i]=b[i]+x*(i*1.0);
}
for(register int i=n;i>=;i--) if(maxx<c[i]) maxx=c[i],r=i;
for(register int i=;i<=n;i++) if(minn>c[i]) minn=c[i],l=i;
ans=maxx-minn;
if((l<r&&L<R)||(l>r&&L>R)) return true;
else return false;
}
double ef(double l,double r){
double mid=(l+r)/(2.0);
if(r-l<0.00000000001) return mid;
if(check(mid)) return ef(mid,r);
else return ef(l,mid);
}
int main(){
scanf("%d",&n);
for(register int i=;i<=n;i++){scanf("%d",&a[i]);b[i]=b[i-]+a[i];}
for(register int i=n;i>=;i--) if(bigg<b[i]) bigg=b[i],R=i;
for(register int i=;i<=n;i++) if(small>b[i]) small=b[i],L=i;
double qwq=ef(,);
check(qwq);
if(ans>&&ans<) ans-=0.000001;
printf("%.6lf",ans);
return ;
}

Weakness

   T2

  显然的宽搜啊~~~ boom 时间超限,但其实难度中等偏下

所以是二分宽搜/二分深搜....(这谁想得到啊!!!!)QAQ

还有一点我用的是宽搜 742ms,而zkc奆佬用的是深搜 255ms QAQ!

  思路:二分找到最小的伤害值,每次二分一个最大的伤害值搜索跑图,高于伤害值的点都不去走

若能走到最后一排则符合二分向下,否则二分向上,最后找到的就是最小的最大伤害值

T2-

 #include <bits/stdc++.h>
using namespace std;
int a[][];
int fx[]={,,-,},fy[]={,,,-};
int x,y,ans,n,m,maxx;
queue <int> q;
bool vis[][];
bool check(int qwq){
while(!q.empty()) q.pop();
for(register int i=;i<=m;i++)q.push(),q.push(i),vis[][i]=;
while(!q.empty()){
x=q.front();q.pop();
y=q.front();q.pop();
if(x==n) return true;
for(register int i=;i<;i++){
int px=x+fx[i];
int py=y+fy[i];
if(px<||px>n||py<||py>m||a[px][py]>qwq||vis[px][py]) continue;
q.push(px);
q.push(py);
vis[px][py]=;
}
}
return false;
}
int ef(int l,int r){
//cout<<l<<" "<<r<<endl;
if(l==r) return l;
int mid=(l+r)>>;
memset(vis,false,sizeof(vis));
if(check(mid)) ef(l,mid);
else ef(mid+,r);
}
int main(){
scanf("%d%d",&n,&m);
for(register int i=;i<=n;i++)
for(register int j=;j<=m;j++){scanf("%d",&a[i][j]);maxx=max(maxx,a[i][j]);}
printf("%d",ef(,));
return ;
}

飓风营救

   T3

  显然打表啊!打表出奇迹!打表nb!难度中等

打表时间复杂度O(285年) 算了吧....

  思路:其实这题跟数论也有点关系,首先先打个素数表,众所周知,素数*素数的得数必然有两个约数

前提是两个素数不等,假设是两个相同素数相乘每乘一次显然约数个数=(i+1)

  举例:

  2 约数=2

  2*2 约数=3

  2*2*2 约数=4

  那搜索方式就是从最大的素数往下搜索,如果乘上当前素数没爆,接着乘

爆了就往回走,无路可走时显然就结束了

T3-

 #include <bits/stdc++.h>
using namespace std;
int p[]={,,,,,,,,,,,,,,,,,,,,,,,,,};
int primenum;
bool ac;
long long ans,tans;
long long n;
void dfs(long long now,long long num,long long deep,long long last){
if(deep>=) return;
else{
if(num>ans){tans=now,ans=num;}
else if(num==ans) tans=min(tans,now);
for(register int i=;i<=last;i++){
if(now*p[deep]<=n){
now*=p[deep];
dfs(now,num*(i+),deep+,i);
}
else break;
}
}
}
int main(){
scanf("%lld",&n);
dfs(,,,);
printf("%lld",tans);
return ;
}

最多约数

  end;

  

  

2019西安多校联训 Day3的更多相关文章

  1. 2019西安多校联训 Day5

    T1 光哥为了不让某初二奆佬恶心到我们而留下的火种 (貌似没这题平均分就100-了) 思路:就一横一竖让后就gztopa嘛 #include <bits/stdc++.h> using n ...

  2. 2019西安多校联训 Day4

    T1 大水题!!难度简单,显然的贪心策略即可,but... 思路:首先我们按与i点作战后活下来的士兵排序,然后 若当前剩余兵力足够直接减掉战斗死亡人数,如果不够就加 够再打它,但是!我们在考完试观察测 ...

  3. 2019西安多校联训 Day2

    试题链接:http://www.accoders.com/contest.php?cid=1894   考试密码请私信; T1 残忍WA 0,明明就是一道非常菜的字符串QAQ 思路:一共找四种东西,A ...

  4. 2019西安多校联训 Day1

    试题链接:http://www.accoders.com/contest.php?cid=1893  考试密码请私信;    T1 明明就是O(n)的模拟,强行打成二分QAQ 思路:判断收尾是否为1或 ...

  5. Contest1893 - 2019年6月多校联训b层测试1

    传送门 密码:waxadyt T1 暴力 对于任意相邻的两个值 中间能到达的最大高度是固定的 加上头尾,判一下就好了 代码//感谢Th Au K #include<bits/stdc++.h&g ...

  6. [DBSDFZOJ 多校联训] 就

    就 背景描述 一排 N 个数, 第 i 个数是 Ai , 你要找出 K 个不相邻的数, 使得他们的和最大. 请求出这个最大和. 输入格式 第一行两个整数 N 和 K. 接下来一行 N 个整数, 第 i ...

  7. [DBSDFZOJ 多校联训] Password

    Password password.in/.out 描述 你来到了一个庙前,庙牌上有一个仅包含小写字母的字符串 s. 传说打开庙门的密码是这个字符串的一个子串 t,并且 t 既是 s 的前缀又是 s ...

  8. 2019 湖南多校第一场(2018~2019NCPC) 题解

    解题过程 开场shl过B,C,然后lfw写J,J WA了以后shl写A,但是因为OJ上空间开小WA了,而不是MLE?,J加了特判过了.之后一直在检查A错哪了,直到qt发现问题改了空间,浪费许多时间,但 ...

  9. 2019 西安邀请赛 D

    //n件物品,m种关系,(有关系的2个不能在同一组) //把所有物品分为2组,希望最后2组的差值尽可能小,输出较大者 /* 二分图涂色+可行性(01)背包 dp[i] =1表示 最后差值为i可行 建图 ...

随机推荐

  1. 数据结构 - 希尔排序(Shell&#39;s Sort) 具体解释 及 代码(C++)

    数据结构 - 希尔排序(Shell's Sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2 ...

  2. 服务器端将复合json对象传回前端

    前端接收后端传过来的JSON对象,对前端来说,传过来的确实就是JSON对象:但后端,类型则灵活得多,可以是IList<>等类型,当然也可以是newtonsoft的JObject类型.反正在 ...

  3. easyUI的下拉框combobox与树tree联动

    参与联动的有 2 个combobox 和 1 个tree: <input id="combobox1" class="easyui-combobox" n ...

  4. 【bzoj4385】[POI2015]Wilcze doły

    单调队列扫描,记录当前区间长度为d的一段的和的最大值,和当前区间和. #include<algorithm> #include<iostream> #include<cs ...

  5. STL 之 list源码自行实现(iterator)

    (0)文件夹 STL 之 vector源码实现(云算法<< [] = 重载, new delete,throw catch) STLc++中string类的源码 堆(stack) 之 c ...

  6. 利用 C# dynamic 减少创建模型类

    C# 的 dynamic 关键字可以是C#可以像 javascript 这种弱类型语言一样具有随时可以添加属性的能力.C# 是一种强类型语言,dynamic 要摆脱类型的限制,自然是有代价的.这里不讨 ...

  7. 4.4 Top-Down Parsing

    4.4 Top-Down Parsing Top-down parsing can be viewed as the problem of constructing a parse tree for ...

  8. 第六周 Leetcode 446. Arithmetic Slices II - Subsequence (HARD)

    Leetcode443 题意:给一个长度1000内的整数数列,求有多少个等差的子数列. 如 [2,4,6,8,10]有7个等差子数列. 想了一个O(n^2logn)的DP算法 DP[i][j]为 对于 ...

  9. 洛谷P1600 天天爱跑步——树上差分

    题目:https://www.luogu.org/problemnew/show/P1600 看博客:https://blog.csdn.net/clove_unique/article/detail ...

  10. IDEA中项目src目录下无法创建java文件的问题

    出现的问题如下,是因为该目录不是源码目录 解决办法 设置成功