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可行 建图 ...
随机推荐
- [英语学习]微软面试前英语集训笔记-day 1
最近有机会参加微软面试前的英语集训. 第一天是由wendy老师主讲.热场题目是介绍你自己.包括你的姓名,家庭hobby,爱好,专业,学校,工作经历等等. 接下来的主题是friendship.给我印象较 ...
- 【bzoj2464】中山市选[2009]小明的游戏
直接转换成最短路 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstr ...
- oracle导入dmp文件时出现异常
oracle导入dmp文件时出现错误 今天在给oracle导入dmp文件时老是出现错误,无论是命令行或PL/SQL,错误截图如下: 经查是导入用户的权限不足,导入用户并没有DBA权限,而导出的dmp文 ...
- Size Classes with Xcode 6:为所有的尺寸准备一个Storyboard
我最喜欢的Xcode6的特性是新的size classes 概念,有了它,我们解决了“我如何能够快速的为那么多不同尺寸屏幕以及方向的设备写app”.他们也让在一个storyboard中创建一个通用的a ...
- 洛谷P2831 愤怒的小鸟——贪心?状压DP
题目:https://www.luogu.org/problemnew/show/P2831 一开始想 n^3 贪心来着: 先按 x 排个序,那么第一个不就一定要打了么? 在枚举后面某一个,和它形成一 ...
- E20170610-hm
presence n. 出席; 仪表; 风度; 鬼魂,神灵; defence n. 防御; 辩护; 防御工事; 后卫; phyle n. 种族,宗族; race n. 赛跑; 民族; 人种; ...
- hdu4738(边双连通分量,桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 01-vue指令
什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于We ...
- ASP.Net 知识点总结(四)
1.get和post 的区别 get是从服务器上获取数据,post是向服务器传送数据; get安全性非常低,数据显示在地址栏,post安全性较高: 但是执行效率却比Post方法好: get有字节限制为 ...
- ASP.NET SQL 总结
1.SQLSERVER服务器中,给定表 table1 中有两个字段 ID.LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句 ...