2019西安多校联训 Day3
试题链接: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),然后疯狂卡精度即可
#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!
思路:二分找到最小的伤害值,每次二分一个最大的伤害值搜索跑图,高于伤害值的点都不去走
若能走到最后一排则符合二分向下,否则二分向上,最后找到的就是最小的最大伤害值
#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
那搜索方式就是从最大的素数往下搜索,如果乘上当前素数没爆,接着乘
爆了就往回走,无路可走时显然就结束了
#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的更多相关文章
- 2019西安多校联训 Day5
T1 光哥为了不让某初二奆佬恶心到我们而留下的火种 (貌似没这题平均分就100-了) 思路:就一横一竖让后就gztopa嘛 #include <bits/stdc++.h> using n ...
- 2019西安多校联训 Day4
T1 大水题!!难度简单,显然的贪心策略即可,but... 思路:首先我们按与i点作战后活下来的士兵排序,然后 若当前剩余兵力足够直接减掉战斗死亡人数,如果不够就加 够再打它,但是!我们在考完试观察测 ...
- 2019西安多校联训 Day2
试题链接:http://www.accoders.com/contest.php?cid=1894 考试密码请私信; T1 残忍WA 0,明明就是一道非常菜的字符串QAQ 思路:一共找四种东西,A ...
- 2019西安多校联训 Day1
试题链接:http://www.accoders.com/contest.php?cid=1893 考试密码请私信; T1 明明就是O(n)的模拟,强行打成二分QAQ 思路:判断收尾是否为1或 ...
- Contest1893 - 2019年6月多校联训b层测试1
传送门 密码:waxadyt T1 暴力 对于任意相邻的两个值 中间能到达的最大高度是固定的 加上头尾,判一下就好了 代码//感谢Th Au K #include<bits/stdc++.h&g ...
- [DBSDFZOJ 多校联训] 就
就 背景描述 一排 N 个数, 第 i 个数是 Ai , 你要找出 K 个不相邻的数, 使得他们的和最大. 请求出这个最大和. 输入格式 第一行两个整数 N 和 K. 接下来一行 N 个整数, 第 i ...
- [DBSDFZOJ 多校联训] Password
Password password.in/.out 描述 你来到了一个庙前,庙牌上有一个仅包含小写字母的字符串 s. 传说打开庙门的密码是这个字符串的一个子串 t,并且 t 既是 s 的前缀又是 s ...
- 2019 湖南多校第一场(2018~2019NCPC) 题解
解题过程 开场shl过B,C,然后lfw写J,J WA了以后shl写A,但是因为OJ上空间开小WA了,而不是MLE?,J加了特判过了.之后一直在检查A错哪了,直到qt发现问题改了空间,浪费许多时间,但 ...
- 2019 西安邀请赛 D
//n件物品,m种关系,(有关系的2个不能在同一组) //把所有物品分为2组,希望最后2组的差值尽可能小,输出较大者 /* 二分图涂色+可行性(01)背包 dp[i] =1表示 最后差值为i可行 建图 ...
随机推荐
- easyUI的下拉框combobox与树tree联动
参与联动的有 2 个combobox 和 1 个tree: <input id="combobox1" class="easyui-combobox" n ...
- URL 字段简析
URL:统一资源定位符:URL是uri的一个子集,另外一个子集是URN. URL语法:(来自HTTP权威指南中文版P29) 组件 描述 默认值 方案 访问服务器以获取资源时要使用哪种协议 无 用户 某 ...
- oracle游标的定义使用
oracle游标的定义使用 2008-02-23 15:12:57| 分类: oracle|字号 订阅 游标中定义的参数只要定义类型,不用定义长度,精度等: 游标使用一: declarecursor ...
- pandas 绘图 机器学习看特征相关性
pandas 绘图 import numpy as np import tflearn from tflearn.layers.core import dropout from tflearn.lay ...
- hdu 4777 Queue
题目大意: 一些人,每个人的身高都是不一样的 然后再给你一个k,表示这个人的左边或者右边,有k个人比他高 然后让你构造一个满足条件且字典序最小的序列 思路: 按照权值排序 这样每次加进去后只有后面的才 ...
- luogu 1726 上白泽惠音
题目大意: 给一个有向图 求一个最大的强连通分量,输出这个强连通分量里的所有元素 若两个联通分量内点数相同 则输出字典序小的那个 思路: 直接tarjan 对每个连通分量,求一下最小点,然后判断字典序 ...
- Same Tree 序列化二叉树
https://oj.leetcode.com/problems/same-tree/ Given two binary trees, write a function to check if the ...
- bzoj 1578: [Usaco2009 Feb]Stock Market 股票市场【背包】
参考:https://blog.csdn.net/mars_ch/article/details/53011234 我背包真是好不熟练啊-- 第一天买了第三天卖相当于第一天买了第二天卖第二天再买第三天 ...
- json和Jsonp 使用总结(1)
1.Json的使用 $.getJSON("subPreview", { jsonDatas: JSON.stringify(jsonData) }, function(data) ...
- [笔试面试题] 3-C++关键字篇
C/C++关键字篇 语言是编程的基础,掌握基本的语言知识是编程的前提条件.关键字是组成语言的最基本单位,对关键字的理解,有助于编写高质量的代码. 1 static(静态)变量有什么作用? 在函数体 ...