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可行 建图 ...
随机推荐
- Codeforces Round #319 (Div. 2) C. Vasya and Petya's Game 数学题
C. Vasya and Petya's Game ...
- 蓝桥 ADV-230 算法提高 12-1三角形 【数学公式】
算法提高 12-1三角形 时间限制:1.0s 内存限制:256.0MB 问题描述 为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体.分别设计独立的函数计算三角形的 ...
- Hibernate - Query简易
package cn.demo; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; im ...
- codeforces 963B Destruction of a Tree
B. Destruction of a Tree time limit per test 1 second memory limit per test 256 megabytes input stan ...
- C的结构体函数
#include<stdio.h> #include<string.h> struct Test { int age; ]; double score; }std1; //结构 ...
- MogileFS介绍
MogileFS介绍 MogileFS 是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发. Danga团队开发了包括 Memcached.Mog ...
- 在visual studio code和visual studio中编写TypeScript文件自动生成JavaScript文件
注:此处的自动生成都为保存ts文件时自动生成js文件 VS CODE 只需要在TypeScript的终端控制台中输入如下命令即可,并注意需要将其中的*换成对应的文件名,此处的*似乎不能作为通用匹配. ...
- E20170526-hm
plain n. 平原; 平地; adj. 平的; 素的; 清晰的; 相貌平平的; layout n. 布局,安排,设计; 布置图,规划图; modularity n. 模块化; 模块性 ...
- 生成自签名ca 证书 使nginx 支持https
创建服务器私钥,命令会让你输入一个口令:$ openssl genrsa -des3 -out server.key 1024创建签名请求的证书(CSR):$ openssl req -new -ke ...
- 计算几何值平面扫面poj2932 Coneology
Coneology Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4097 Accepted: 859 Descript ...