indeed 5.13 第二次网测
题目描述,我找不见了,大概写一下想法和代码吧。
1. 没有看
2. 由于数据范围很小,就是简单的枚举,求全排列,然后更新答案。
#include<bits/stdc++.h>
#define pb push_back
typedef long long ll;
using namespace std;
typedef pair<int, int> pii;
const int maxn = 1e3 + ;
int n, k, m;
int a[], b[], u[];
bool ina[], inb[];
int work() {
int r = ;
for (int i = ; i < m; i++) {
if(ina[a[i] ] && ina[b[i] ])
r += u[i];
if(inb[a[i] ] && inb[b[i] ])
r += u[i];
}
return r;
}
void solve() {
cin >> n >> k >> m;
for (int i = ; i < m; i++) {
cin >> a[i] >> b[i] >> u[i];
}
vector<int> p;
for (int i = ; i <= n; i++)
p.push_back(i);
int res = ;
do {
memset(ina, , sizeof ina);
memset(inb, , sizeof inb);
for (int i = ; i < k; i++)
ina[p[i] ] = ;
for (int i = k; i < k * ; i++)
inb[p[i] ] = ;
res = max(res, work());
} while(next_permutation(p.begin(), p.end()));
cout << res << endl;
} int main() {
freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
ios::sync_with_stdio();
cin.tie(); cout.tie();
solve();
return ;
}
3. 这次第三题挺有意思的,求左上角到右下角的最短路径,但是多了一种跳的操作。
我的想法很简单,由于在每一个点上都可以选择跳与不跳,而且只能一次跳, 那就预处理出每个点到起始点的距离,每个点到终点的距离,然后遍历每一个点,更新答案。
一个是这个点到起点的距离加上到终点的距离, 一个是这个点到起点的距离 + 1(完成跳的动作) + 跳之后的点到终点的距离。更新答案。
#include<bits/stdc++.h>
#define pb push_back
typedef long long ll;
using namespace std;
typedef pair<int, int> pii;
const int maxn = 1e3 + ;
const int inf = 1e5;
int h, w, d, r;
string a[];
int sdis[][], edis[][];
int dx[] = {, , , -};
int dy[] = {, -, , };
bool check(int x, int y) {
if(x < || x >= h || y < || y >= w) return ;
return ;
}
void dfs(int x, int y, int v) {
sdis[x][y] = v;
for (int i = ; i < ; i++) {
int cx = x + dx[i], cy = y + dy[i];
if(check(cx, cy) && a[cx][cy] != '#' && sdis[cx][cy] > v + ) {
dfs(cx, cy, v + );
}
}
}
void dfs1(int x, int y, int v) {
edis[x][y] = v;
for (int i = ; i < ; i++) {
int cx = x + dx[i], cy = y + dy[i];
if(check(cx, cy) && a[cx][cy] != '#' && edis[cx][cy] > v + ) {
dfs1(cx, cy, v + );
}
}
}
void solve() {
cin >> h >> w >> d >> r;
for (int i = ; i < h; i++)
cin >> a[i];
for (int i = ; i < h; i++) {
for (int j = ; j < w; j++)
sdis[i][j] = edis[i][j] = inf;
}
dfs(, , );
dfs1(h - , w - , );
int res = inf;
for (int i = ; i < h; i++) {
for (int j = ; j < w; j++) {
int t1 = sdis[i][j] + edis[i][j];
res = min(res, t1);
int x = i + d, y = j + r;
if(check(x, y)) {
int t2 = sdis[i][j] + edis[x][y] + ;
res = min(res, t2);
} }
}
if(res == inf) res = -;
cout << res << endl;
} int main() {
freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
ios::sync_with_stdio();
cin.tie(); cout.tie();
solve();
return ;
}
4. 目标函数是差的绝对值乘以权值之和, 考虑权值都相等的时候,这时候的最佳点就是中间的那个点(奇数个点是中间点,偶数个点是中间2个点之间的点都行)。
下面考虑权值r不相等的时候,这个函数其实是凹的, 这个性质很重要,可以进行二分查找,目标点是该点比它左右2点的函数值都要小, 如果该点比左边大,比右边小,那查找区间往左移动,否则往右移动。
#include<bits/stdc++.h>
#define pb push_back
typedef long long ll;
using namespace std;
typedef pair<int, int> pii;
const int maxn = 1e5 + ;
ll len;
int n;
ll a[maxn];
int r[maxn];
ll work(ll x) {
ll res = ;
for (int i = ; i < n; i++) {
res += abs(a[i] - x) * r[i];
}
return res;
}
void solve() {
scanf("%lld%d", &len, &n);
for (int i = ; i < n; i++) {
scanf("%lld%d", &a[i], &r[i]);
}
ll left = , right = len;
ll res = -;
while(left < right) {
ll mid = (left + right) / ;
ll r = work(mid);
ll r1 = work(mid - );
ll r2 = work(mid + );
if(r <= r1 && r <= r2) {
left = right = mid;
break;
} else if(r1 <= r && r <= r2) {
right = mid - ;
} else if(r1 >= r && r >= r2) {
left = mid + ;
}
}
if(left < ) left++;
if(left > len) left--;
printf("%lld\n", work(left));
} int main() {
freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
solve();
return ;
}
indeed 5.13 第二次网测的更多相关文章
- 2014-CVTE网测部分软件技术测试题及答案
1.叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树满足的条件是(D) A.空或只有一个结点 B.高度等于其结点数 C.该二叉树是完全二叉树 D.所有结点无右孩子 应该是二叉树的每个结点都只有一个 ...
- < 独立项目 - 文本挖掘 > - 2016/11/13 第二更 - <Python环境准备>
< 独立项目 - 文本挖掘 > 项目立项的相关背景介绍,TODO方向. 一.Ubuntu环境配置 主机系统:Windows 7 SP1 64位操作系统 | i5-4210 CPU | ...
- indeed2017校招在线编程题(网测)三
A. Calculate Sequence 分析:就是斐波那契递推公式,但是初始值是指定的,只用求第10个数,数据范围和复杂度都比较小,直接写. B. 忘了叫啥了. 就是有a-j十个字符组成的字符串, ...
- wap网测一道题目
1. 给定一个字符串s, 1 <= len(s) <= 3000, 定义odd palindrome string为长度为奇数的回文串, 求s中该奇回文串的个数. 比如axbcba , 结 ...
- wap 5.23 网测几道题目
1. n个犯人,m个省份, 如果相邻的2个犯人来自同一省份,则是不安全的,求不安全的个数. 正难则反,用全部的个数减去非法的个数,就是最后的答案. m^n - m * (m - 1) ^ (n - 1 ...
- 5.27 indeed 第三次网测
1. 第一题, 没有看 2. 暴力枚举.每一个部分全排列, 然后求出最大的请求数. #include<bits/stdc++.h> #define pb push_back typedef ...
- indeed 4.22 第一次网测
1.第一题 没有看 2. 由于数据范围很小,所以每一层需要全排列,寻找最小的花费,然后所有层加起来就是最后的结果. #include<bits/stdc++.h> #define pb p ...
- PL/SQL Developer 13注册码(亲测可用)
product code: 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le serial Number: 226959 password: xs374ca
- mysql每秒最多能插入多少条数据 ? 死磕性能压测
前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...
随机推荐
- js案例分析
名字取的高大上,其实只是我平时上网浏览遇到的一些我感觉还不错的小题目,再加上我或者是我在网上找到的一些理解,就保存到这里了. 2019/4/2 最新开了个新坑,是一个javascipt30的一些案例 ...
- JS弹出子窗口
目的 在一个主窗口中,点击一个链接, 弹出一个子窗口 , 父窗口保留 在子窗口中点击关闭, 关闭子窗口. 子窗口的位置位于屏幕的中间 实现 main.html <!DOCTYPE html> ...
- Python编码格式导致的csv读取错误
Python编码格式导致的csv读取错误(pandas.read_csv) 本文记录python小白我今天遇到的这两个问题(csv.reader和pandas.csv_read): pandas模块“ ...
- webpack-dev-server和webpack
指导小伙伴在webstorm+nodejs环境下新建项目时,小伙伴出现了一个很神奇的问题:没有执行webpack-dev-server情况下,即使执行npm init,也不会出现package.jso ...
- GeoTrust 企业(OV)型 通配符(Wildcard) SSL证书
GeoTrust 企业(OV)型 通配符(Wildcard)SSL证书(GeoTrust True BusinessID Wildcard SSL Certificates),支持通配符(Wild ...
- 【Codeforces 225C】Barcode
[链接] 我是链接,点我呀:) [题意] 让你把每一列都染成一样的颜色 要求连续相同颜色的列的长度都大于等于x小于等于y 问你最少的染色次数 [题解] 先求出每一列染成#或者.需要染色多少次 设f[0 ...
- Java基础学习总结(70)——开发Java项目常用的工具汇总
要想全面了解java开发工具,我们首先需要先了解一下java程序的开发过程,通过这个过程我们能够了解到java开发都需要用到那些工具. 首先我们先了解完整项目开发过程,如图所示: 从上图中我们能看到一 ...
- 洛谷 P4198 BZOJ 2957 楼房重建
题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些事件发生在一个 ...
- Debug : array type has incomplete element type
array type has incomplete element type extern struct SoundReport SoundList[32]; ///// 多写了 st ...
- Linux进程线程学习笔记:运行新程序
Linux进程线程学习笔记:运行新程序 周银辉 在上一篇中我们说到,当启动一个新进程以后,新进程会复制父进程的大部份上下 ...