目录
一.移动距离
题目链接:https://www.lanqiao.cn/problems/20558/learning/

1.题目讲解

我要进行计算角度,角度就是tanθ = 666 / 233 => θ = arctan 666 / 233
2.代码实现
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double x = 233,y = 666;
printf("%.0lf",sqrt(x * x + y * y) * (1 + atan(y / x)));
return 0;
}
二.客流量上限
题目链接:https://www.lanqiao.cn/problems/20550/learning/

1.题目讲解








2.代码实现
#include <iostream>
using namespace std;
typedef long long LL;
const int MOD = 1e9 + 7;
int main()
{
LL ret = 1;
for(int i = 1;i <= 1012;i++)
{
ret = ret * 2 % MOD;
}
cout << ret << endl;
return 0;
}
三.可分解的正整数
题目链接:https://www.lanqiao.cn/problems/20545/learning/


1.题目讲解
除了1不可以,其他的都可以写成负数 0 正数的形式
2.代码实现
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int cnt = 0;
while(n--)
{
int x;
cin >> x;
if(x != 1)
{
cnt++;
}
}
cout << cnt << endl;
return 0;
}
四.产值调整
题目链接:https://www.lanqiao.cn/problems/20538/learning/


1.题目讲解

2.代码实现
#include <iostream>
using namespace std;
int main()
{
int T;
cin >> T;
while(T--)
{
int a,b,c,k;
cin >> a >> b >> c >> k;
while(k--)
{
int x = (b + c) / 2,y = (a + c) / 2,z = (a + b) / 2;
a = x;
b = y;
c = z;
if(a == b && b == c)
{
break;
}
}
cout << a << " " << b << " " << c << endl;
}
return 0;
}
五.画展布置
题目链接:https://www.lanqiao.cn/problems/20532/learning/


1.题目讲解

2.代码实现
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
LL n,m,a[N];
int main()
{
cin >> n >> m;
for(int i = 1;i <= n;i++)
{
cin >> a[i];
}
sort(a + 1,a + n + 1);
LL ret = 1e10;
for(int i = 1;i + m - 1 <= n;i++)
{
ret = min(ret,a[i + m - 1] * a[i + m - 1] - a[i] * a[i]);
}
cout << ret << endl;
return 0;
}
六.水质检测
题目链接:https://www.lanqiao.cn/problems/20525/learning/


1.题目讲解
01bfs算法

2.代码实现
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int N = 1e6 + 10;
int n;
char g[2][N];
int dist[2][N];
bool st[2][N];
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
int bfs(int i,int j)
{
int ret = 0;
memset(dist,0x3f,sizeof dist);
deque<pair<int,int>> q;
q.push_back({i,j});
dist[i][j] = 0;
while(q.size())
{
auto t = q.front();
q.pop_front();
int x = t.first,y = t.second;
if(st[x][y])
{
continue;
}
st[x][y] = true;
if(g[x][y] == '#')
{
ret = max(ret,dist[x][y]);
}
for(int i = 0;i < 4;i++)
{
int nx = x + dir[i][0],ny = y + dir[i][1];
if(nx < 0 || nx >= 2 || ny < 0 || ny >= n || st[nx][ny])
{
continue;
}
int w = g[nx][ny] == '#' ? 0 : 1;
dist[nx][ny] = min(dist[nx][ny],dist[x][y] + w);
if(w)
{
q.push_back({nx,ny});
}
else
{
q.push_front({nx,ny});
}
}
}
return ret;
}
int main()
{
cin >> g[0] >> g[1];
n = strlen(g[0]);
for(int j = 0;j < n;j++)
{
if(g[0][j] == '#')
{
cout << bfs(0,j) << endl;
return 0;
}
if(g[1][j] == '#')
{
cout << bfs(1,j) << endl;
return 0;
}
}
cout << 0 << endl;
return 0;
}
七.生产车间
题目链接:https://www.lanqiao.cn/problems/20516/learning/


1.题目讲解





2.代码实现
#include <iostream>
#include <vector>
using namespace std;
const int N = 1010;
int n,w[N];
vector<int> edges[N];
int f[N][N];
void dfs(int x,int fa)
{
f[x][0] = true;
if(edges[x].size() == 1 && x != 1)
{
f[x][w[x]] = true;
return;
}
for(auto y : edges[x])
{
if(y == fa)
{
continue;
}
dfs(y,x);
for(int j = w[x];j >= 0;j--)
{
for(int k = min(w[y],j);k >= 0;k--)
{
f[x][j] = f[x][j] || (f[y][k] && f[x][j - k]);
}
}
}
}
int main()
{
cin >> n;
for(int i = 1;i <= n;i++)
{
cin >> w[i];
}
for(int i = 1;i < n;i++)
{
int a,b;
cin >> a >> b;
edges[a].push_back(b);
edges[b].push_back(a);
}
dfs(1,0);
for(int i = w[1];i >= 0;i--)
{
if(f[1][i])
{
cout << i << endl;
break;
}
}
return 0;
}

#include <iostream>
#include <bitset>
using namespace std;
int main()
{
bitset<100> a, b; // 申请一个长度为 100 的 01 串
a |= (1 << 10); // 把第 10 位置成 1
b |= a; // b = b | a
cout << a[10] << endl;
cout << b[10] << endl;
a <<= 1; // 将 a 整体左移一位
cout << a[10] << endl;
cout << a[11] << endl;
return 0;
}

#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
const int N = 1010;
int n,w[N];
vector<int> edges[N];
//bool f[N][N];
bitset<N> f[N];
void dfs(int x,int fa)
{
f[x][0] = true;
if(edges[x].size() == 1 && x != 1)
{
f[x][w[x]] = true;
return;
}
for(auto y : edges[x])
{
if(y == fa)
{
continue;
}
dfs(y,x);
bitset<N> tmp = f[x];
for(int k = w[y];k >= 0;k--)
{
if(f[y][k])
{
f[x] |= tmp << k;
}
}
}
}
int main()
{
cin >> n;
for(int i = 1;i <= n;i++)
{
cin >> w[i];
}
for(int i = 1;i < n;i++)
{
int a,b;
cin >> a >> b;
edges[a].push_back(b);
edges[b].push_back(a);
}
dfs(1,0);
for(int i = w[1];i >= 0;i--)
{
if(f[1][i])
{
cout << i << endl;
break;
}
}
return 0;
}
八.装修报价
题目链接:https://www.lanqiao.cn/problems/20510/learning/


1.题目讲解




2.代码实现
#include <iostream>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10,MOD = 1e9 + 7;
LL n,a[N];
LL mi[N];
int main()
{
cin >> n;
for(int i = 1;i <= n;i++)
{
cin >> a[i];
}
mi[0] = 1;
for(int i = 1;i <= n;i++)
{
mi[i] = mi[i - 1] * 3 % MOD;
}
LL ret = 0,s = 0;
for(int i = 1;i < n;i++)
{
s ^= a[i];
ret = (ret + s * 2 % MOD * mi[n - i - 1] % MOD) % MOD;
}
s ^= a[n];
ret = (ret + s) % MOD;
cout << ret << endl;
return 0;
}
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/weixin_60668256/article/details/159913682




