A

link



判断即可。。。

点击查看代码
#include<bits/stdc++.h>

using namespace std;

int r,g,b;
string c; signed main(){ cin >> r >> g >> b >> c;
if(c == "Red") cout << min(g,b);
else if(c == "Blue") cout << min(r,g);
else cout << min(r,b); return 0; }

B

link



根据距离公式算三边距离,再根据勾股定理计算是否为\(RT△\)

注意\(double\)型不能直接判断相等,要判断差的绝对值小于某一个很小的数。

点击查看代码
#include<bits/stdc++.h>

using namespace std;

int xa,ya,xb,yb,xc,yc;

double dis(int x,int y,int l,int r){
return sqrt(1.0*(x-l)*(x-l)+1.0*(y-r)*(y-r));
} signed main(){ cin >> xa >> ya >> xb >> yb >> xc >> yc;
double a[3] = {dis(xa,ya,xb,yb),
dis(xa,ya,xc,yc),dis(xb,yb,xc,yc)}; sort(a,a+3);
double t = a[0]*a[0]+a[1]*a[1];
double tt = a[2]*a[2];
if(abs(t-tt) < 1e-6) cout << "Yes";
else cout << "No"; return 0; }

C

link



首先,判断一下是否可能:把所有的\(l_i\)和\(r_i\)分别相加,得到两个数\(R\)和\(L\)。

如果\(L\)到\(R\)包括\(0\)即有解。因为所有数之和最小为\(L\),最大为\(R\),所以\(L\)到\(R\)包括\(0\)即有解。

那么怎么求解呢?

我们先让所有的\(a_i\)等于\(l_i\),这时所有数的和小于\(0\)。接下来,我们从\(1\)开始遍历,如果当前所有数的和仍不是\(0\)(小于\(0\)),则让\(a_i\)变大,如果可以变到\(r_i\)则变到\(r_i\),否则变大当前所有数的和与\(0\)的差。

点击查看代码
#include<bits/stdc++.h>

#define int long long

using namespace std;

int n,suml,sumr;
int l[200005],r[200005];
int a[200005]; signed main(){ cin >> n; for(int i = 1;i <= n;++ i){
cin >> l[i] >> r[i];
suml += l[i];
sumr += r[i];
a[i] = l[i];
} if(suml <= 0&&sumr >= 0) cout << "Yes\n";
else{
cout << "No";
return 0;
} int tmp = -1*suml; for(int i = 1;i <= n;++ i){
if(tmp > r[i]-l[i]){
a[i] = r[i];
tmp -= r[i]-l[i];
}
else{
a[i] += tmp;
break;
}
} for(int i = 1;i <= n;++ i)
cout << a[i] << " "; return 0; }

D

link



这个题就是最短路。

对于一条边,将终点的点权加到边权里去,跑最短路即可,最后把起点的点权加上。

点击查看代码
#include<bits/stdc++.h>

#define pii pair<int,int>
#define int long long using namespace std; int n,m;
int a[200005];
vector<pair<int,int> > ed[200005];
int ds[200005];
const int inf = 1e18;
bool vs[200005]; void dijkstra(int s){
for(int i = 1;i <= n;++ i)
ds[i] = inf;
ds[s] = a[s];
priority_queue<pii,vector<pii>,greater<pii> >q;
q.push({ds[s],s});
while(!q.empty()){
int t = q.top().second;q.pop();
if(vs[t]) continue;
vs[t] = 1;
for(int i = 0;i < ed[t].size();++ i){
int j = ed[t][i].first,
w = ed[t][i].second;
if(ds[j] > ds[t]+w){
ds[j] = ds[t]+w;
q.push({ds[j],j});
}
}
}
} signed main(){ cin >> n >> m;
for(int i = 1;i <= n;++ i)
cin >> a[i];
for(int i = 1;i <= m;++ i){
int u,v,w;
cin >> u >> v >> w;
ed[u].push_back({v,w+a[v]});
ed[v].push_back({u,w+a[u]});
} dijkstra(1); for(int i = 2;i <= n;++ i)
cout << ds[i] << " "; return 0; }

随机推荐

  1. jsonp原理详解——终于弄明白了JSONP

    什么是JSONP? 其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来有些困难,着用自己的方式来阐释一下这个问题,看看是否有帮助. 1.一个众所周知的问题, ...

  2. Android 12(S) ALooper AHandler AMessage(一)

    卧榻之侧岂容他人酣睡,到现在ALooper AHandler AMessage的工作原理一直都没搞懂,很慌!看他们的路径都在libstagefright/foundation下,作为一个foundat ...

  3. Linux内核Kernel启动过程

    在上一篇计算机启动过程文章中介绍了计算机启动的基本流程,本篇文章主要介绍Linux内核Kernel的启动过程. 一.内核启动的基本流程 sequenceDiagram participant Boot ...

  4. UIView AutoLayout WrapContent,UIview 实现自动包裹

    一.需求 实现一个UI组件,要求组件内部的内容变化的时候,内容需要同时产生变化 二.实现 效果: 一个三个元素的组件,两边固定大小,中间的Label内容会变化 实现的约束: 首先保证三个元素同时居中, ...

  5. 代码审计——基础(JAVASE)

    JAVASE 目录 JAVASE 基本语法 关键字 变量 作业1 作业完成 第一题:简单的介绍了java语言历史,优势.发展 第二题:特性:面向对象.跨平台.封装.继承.多态.抽象.扩展性.健壮性.垃 ...

  6. Linux扩展篇-shell编程(十一)- shell编程工具-VS Code

    根据个人多年工作经验,shell没有自己专用的IDE,使用vim开发,对于新手而言不太友好,那如何高效快速书写shell脚本?合适的工具就显得尤为重要,本人比较推荐的就是VS Code.里面有比较成熟 ...

  7. 《Android开发卷——自定义日期选择器(三)》

                 继 <Android开发卷--自定义日期选择器(一)>:http://blog.csdn.net/chillax_li/article/details/19047 ...

  8. vue排行榜 加单位

  9. leetcode | 103. 二叉树的锯齿形层序遍历 | JavaScript实现

    题目 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 .(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 思路 按照正常的层序遍历,然后再对下标为奇数的数组进 ...

  10. 基于redis的选主功能设计

    需求背景 在JAVA应用开发过程中,越来越多的项目采用了微服务架构,而采用微服务架构最直接作用是可以实现业务层解耦,有利于研发团队可以从业务层面进行划分,比如某几个人的小团队负责某几个微服务,总之,从 ...