2021.4.10-4.16总结
作者:互联网
文章目录
主要学习了
一:算法部分:
1.数论中的基础算法:
1.1 最大公约数
//gcd(a,b) = gcd(b,a%b)
int gcd(int a,int b)
{
return b?gcd(b,a%b) :a;
}
1.2 筛质数
(暴力做法)
for(int i = 2;i<=n/i;i++)
{
if(n%i==0) a[cnt++] = i;
}
(埃筛法)
bool st[N];
for(int i = 2;i<=n;i++)
{
if(!st[i])
for(int j = i+i;j<=n;j+=i)
st[j] = true;
}
2.图论中的dijkstra算法
2.1问题引入
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。
请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。
输入格式
第一行包含整数 n 和 m。
接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。
输出格式
输出一个整数,表示 1 号点到 n 号点的最短距离。
如果路径不存在,则输出 −1。
数据范围
1≤n≤500,
1≤m≤105,
图中涉及边长均不超过10000。
输入样例:
3 3
1 2 2
2 3 1
1 3 4
输出样例:
3
2.2代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m;
const int N= 510;
int dist[N];
int g[N][N];
bool st[N];
int dijkstra()
{
memset(dist,0x3f,sizeof dist);
dist[1] = 0;
for(int i = 0;i<n;i++)
{
int t = -1;
for(int j = 1;j<=n;j++)
{
if(!st[j]&&(t==-1||dist[t]>dist[j]))
t = j;
}
st[t] = true;
for(int j = 1;j<=n;j++)
{
if(dist[j]>dist[t]+g[t][j])
dist[j] = dist[t]+g[t][j];
}
}
if(dist[n]==0x3f3f3f3f) return -1;
return dist[n];
}
int main()
{
cin>>n>>m;
memset(g,0x3f,sizeof g);
while(m--)
{
int x,y,z;
cin>>x>>y>>z;
g[x][y] = min(g[x][y],z);
}
cout<<dijkstra();
}
2.3 练习题一:
在 n 个人中,某些人的银行账号之间可以互相转账。
这些人之间转账的手续费各不相同。
给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问 A 最少需要多少钱使得转账后 B 收到 100 元。
输入格式
第一行输入两个正整数 n,m,分别表示总人数和可以互相转账的人的对数。
以下 m 行每行输入三个正整数 x,y,z,表示标号为 x 的人和标号为 y 的人之间互相转账需要扣除 z% 的手续费 ( z<100 )。
最后一行输入两个正整数 A,B。
数据保证 A 与 B 之间可以直接或间接地转账。
输出格式
输出 A 使得 B 到账 100 元最少需要的总费用。
精确到小数点后 8 位。
数据范围
1≤n≤2000,
m≤105
输入样例:
3 3
1 2 1
2 3 2
1 3 3
1 3
输出样例:
103.07153164
2.4 代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 2010;
double dist[N];
double g[N][N];
bool st[N];
int n,m,S,T;
void dijkstra()
{
//memset(dist,0x3f,sizeof dist);
dist[S] = 1;
for(int i = 0;i<n;i++)
{
int t = -1;
for(int j = 1;j<=n;j++)
{
if(!st[j]&&(t==-1||dist[t]<dist[j]))
t = j;
}
st[t] = true;
for(int j = 1;j<=n;j++)
{
dist[j] = max(dist[j],dist[t]*g[t][j]);
}
}
}
int main()
{
double c1 ,c2;
cin>>n>>m;
while(m--)
{
int x,y,z;
cin>>x>>y>>z;
//c1 = (100-z)/100;
c2 = (100.0-z)/100;
g[x][y] = g[y][x] = max(g[x][y],c2);//每条边存储百分比的值
}
//cout<<c1<<endl;
//cout<<c2<<endl;
cin>>S>>T;
dijkstra();
printf("%.8lf",100/dist[T]);
}
2.5 复习了前缀和、递归和递推、枚举排列数、背包问题、以及练习了部分BFS的习题
https://blog.csdn.net/qq_45933509/article/details/115482370
二:英语部分:
精听了美国金融新闻1,2(very hard)
精听了DailyEnglish 83,84(medium hard)
复习了大学生英语竞赛的部分语法(准备4.24的考试)
1:https://www.bilibili.com/video/BV1pi4y1T7hR
2:https://www.bilibili.com/video/BV1LV411v7hb
83:https://www.bilibili.com/video/BV1U7411a7xG?p=83&spm_id_from=pageDriver
humble | 谦逊的,简陋的 |
---|---|
showy | (fancy)绚丽的,华贵的 |
– | – |
84:https://www.bilibili.com/video/BV1U7411a7xG?p=84&spm_id_from=pageDriver
1.精听词汇:
upbeat on | 对…看好 |
---|---|
small-cap stocks | 小公司股票 |
cyclicals | 周期性股票 |
Caterpillar | 美国建材公司 |
infrastructure | 基础设施 |
volatility | 动荡 |
volatile | adj.动荡的 |
prospect for | 对…的展望 |
hold sth. back | 把…拖住 |
The Federal Reserve | 美联储 |
gonna | going to |
more of a … than … | 与其说是…不如说是… |
2.精听词汇
inauguration | 就职 |
---|---|
orderly | 有条不紊的 |
uneventful | 没有发生重大事件的 |
fiscal | 财政的 |
scenario | 情境 |
标签:10,dist,2021.4,4.16,int,st,精听,include,号点 来源: https://blog.csdn.net/qq_45933509/article/details/115752656