http://discuss.acmcoder.com/topic/58db8e2ebb0f44ba0e94e670

上面是完整的题目,下面一下我自己的想法。

http://discuss.acmcoder.com/topic/58db8e2ebb0f44ba0e94e670

官方题解。

这次做的比较菜,就做出来第二题,1和3都没搞出来。

1. 第一题,首先知道数一个数阶乘末尾0的个数,由于5*2 = 10,5比2多,所以就变成数因子5的个数,5的数法,需要找规律,首先每五个数有一个因子5,然后接下来压缩后,每5个数,还有一个5,不断的递归调用,即可。同理,数其他的质因子都是这样吧。

我做的时候,老是以为有什么规律,默认为就是数学题么,肯定有规律的,然后没接出来。

有了快速数5的个数的方法以后,那么解法就显而易见了,就是二分。而且题目,也提醒单调的性质,就差直接提醒你用二分了,然后就是对可能的答案进行二分,多了往左走,少了往右走。很容易分析最大可能的答案是最大的数乘以5.然后二分。

总结出一个套路:有单调的性质,或者有非递减的性质之类的,立马要想到二分,有些二分可能不明显,如对答案二分等,需要仔细分析。同时,注意二分的几种写法,满足要求最小的,满足要求最大的,或者唯一的,写法都不太一样,注意。

 #include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll inf = 5e8; ll work(ll t) {
ll res = ;
while(t > ) {
res += t / ;
t /= ;
}
return res;
}
void solve() {
int x;
for (x = ; x <= ; x++) {
ll left = , right = inf;
while(left < right) {
ll mid = (left + right) / ;
ll t = work(mid);
if(t < x) left = mid + ;
else right = mid;
}
if(work(left) == x) cout << left << endl;
else cout << - << endl;
}
} int main() {
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
ios::sync_with_stdio();
cin.tie(); cout.tie();
solve();
return ;
}

2. 第二题,显然是一棵树,然后固定树的层次结构,对每一个节点,需要找到儿子里面的最长路径,以及该节点外的最长路径,发现不好计算,然后转化为依次切割每一条边,分别这个边两边的最长路径。看答案,我是真的把边删掉,其实只要简单设置根节点的父节点为相邻节点即可,真是个好方法。然后这个题数据范围很小,应该能跑出来,每次都是O(n)的,所以很容易的就ac了。

 /*
ID: y1197771
PROG: test
LANG: C++
*/
#include<bits/stdc++.h>
#define pb push_back
#define FOR(i, n) for (int i = 0; i < (int)n; ++i)
#define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
typedef long long ll;
using namespace std;
typedef pair<int, int> pii;
const int maxn = 2e2 + ;
int e[maxn][maxn];
int n;
vector<pii> a;
int ans;
int work(int u, int p) {
int x, y;
x = y = ;
for (int i = ; i <= n; i++) {
if(e[u][i] && i != p) {
int t = work(i, u);
if(t > y) y = t;
if(y > x) swap(x, y);
}
}
ans = max(ans, x + y + );
return x + ;
}
void solve() {
while(cin >> n) {
memset(e, , sizeof e);
int x, y;
a.clear();
for (int i = ; i < n - ; i++) {
cin >> x >> y;//cout << x << " " << y << endl;
e[x][y] = ;
e[y][x] = ;
a.pb({x, y}); } int res = ; for (int i = ; i < n - ; i++) {
x = a[i].first, y = a[i].second;
e[x][y] = e[y][x] = ;
int t1, t2;
t1 = t2 = ;
ans = ;
work(x, );
t1 = max(, ans - );
ans = ;
work(y, );
t2 = max(, ans - );
res = max(res, t1 * t2);
e[x][y] = e[y][x] = ;
}
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. 第三题,读完题意,没啥想法,我的想法是对每一个区间进行求解,每个区间必须是匹配的,也就是完整的,然后第一个位置就是‘(’,然后一次枚举‘)’可以放的位置,进行递归求解,复杂度太高。直接tle。

没想法,只好看题解答案。

居然是转化成1,-1的形式进行处理,太巧秒了!(我就想到上次有一个01的序列,求最长的区间,这个区间满足0和1的个数相等,也是处理成-1和1的形式,真是够巧妙的。)处理成1,-1的形式,那么括号匹配的情况就很显然了,就是前面和为0,而且合法的情况必然是前面的和大于等于0的,这个也很关键,下面考虑怎么缩减问题规模,也就是怎么转移(通常的dp套路,缩减问题规模,转化为规模较小的子问题,而分出来的那一小部分很好计算)。然后就是第k个位置,可能的合法的情况就是0-k,0代表前面完全匹配,k代表前面的都是左括号,这样,前面就不会出现右括号不匹配的情况。

特别注意n*=2,然后考虑还会有一些非法的情况出现,比如偶数位置上,是不可能达到0的,设置这些状态为一个很小的数,使得不干扰最后的结果。

真是个好题!

 /*
ID: y1197771
PROG: test
LANG: C++
*/
#include<bits/stdc++.h>
#define pb push_back
#define FOR(i, n) for (int i = 0; i < (int)n; ++i)
#define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
typedef long long ll;
using namespace std;
typedef pair<int, int> pii;
const int maxn = 1e3 + ;
const int inf = -1e9;
int dp[][];
int n;
int a1[], a2[];
void solve() {
cin >> n;
for (int i = ; i <= * n; i++) {
cin >> a1[i];
}
for (int i = ; i <= * n; i++) {
cin >> a2[i];
}
for (int i = ; i <= n * ; i++)
dp[][i] = inf;
for (int i = ; i <= n * ; i++) {
for (int j = ; j <= i; j++) {
if(j == ) {
dp[i][j] = dp[i - ][j + ] + a2[i];
} else {
dp[i][j] = max(dp[i - ][j + ] + a2[i], dp[i - ][j - ] + a1[i]);
}
}
}
cout << dp[n * ][] << endl;
}
int main() {
freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
ios::sync_with_stdio();
cin.tie(); cout.tie();
solve();
return ;
}

做完题目,只有多总结,分析原因,尤其是自己当初做的时候是怎么想的,有没有计算复杂度,考虑可行性, 不行的话,有没有pass掉, 然后为什么没有想出题解的这样的方式,这才是最重要的,这样提高才是最快的,否则,跟没有做一样!

vmware笔试题目的更多相关文章

  1. # C/C++的笔试题目

    p,li { white-space: pre-wrap } # C/C++的笔试题目 + include<> 和include"" 的区别 + sizeof操作符与字 ...

  2. 汇顶科技&&硬件类笔试题目

    汇顶科技硬件类笔试题目,每年都有变化,但是题目类型都差不多.汇顶科技17年在南京地区大概招了20个左右吧,给的待遇还是不错的,工作地点上海深圳

  3. C/C++笔试题目

    1. C语言中无符号数与有符号数 unsigned ; ; printf( printf( ? 有符号数和无符号数在进行比较运算时(==,>=,<=,>,<),有符号数隐式的转 ...

  4. 九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目

    题目地址:http://ac.jobdu.com/problem.php?pid=1525 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串 ...

  5. [笔试题目]使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?

    [笔试题目] 使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍? StringBuffer 底层是依赖了一个字符数组才能存储字符 ...

  6. Android常见面试笔试题目

    Android常见面试笔试题目 1.在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 答:可以处理消息循环的线程,他是一个拥 ...

  7. C++笔试题目大全(笔试宝典)(不断完善中)

    1.new . delete . malloc . free 关系 delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存, new 调用构造函数. malloc 与 fre ...

  8. js坑爹笔试题目汇总(持续更新中)

    把你的面试官问倒,你就是一个合格的面试者了,以下总结一些易错的js笔试题目,会持续更新中.欢迎关注 1,考察this var length = 10 function fn(){ alert(this ...

  9. 几道经典的SQL笔试题目

      几道经典的SQL笔试题目(有答案) (1)表名:购物信息 购物人      商品名称     数量 A            甲          2 B            乙        ...

随机推荐

  1. BZOJ 4817: [Sdoi2017]树点涂色 LCT+Access的性质+DFS序+线段树

    Code: #include<bits/stdc++.h> #define maxn 200003 #define inf -1000000 using namespace std; vo ...

  2. C#第九节课

    try catch using System;using System.Collections.Generic;using System.Linq;using System.Text;using Sy ...

  3. 进程(day09)

    进程的管理 一.进程的基础 进程和程序的区别 每个进程有自己的pid.PCB 操作系统上运行的所有进程构成一颗树. 如何查看这颗树? pstree() 树根进程是init pid是 进程间的亲缘关系两 ...

  4. 从零开始创建一个 PHP 扩展

    创建一个扩展的基本步骤都有哪些.示例中,我们将实现如下功能: <?phpecho say();?> 输出内容: $ php ./test.php$ hello word 在扩展中实现一个s ...

  5. 还不打算去认识一下webpack?

    前言 随我来,去看看webpack!(为时未晚)============>第一版(较浅显的知识,懂得可忽略本文) 方向 安装,起步搭建运行. (粗略代过) 对于资源的管理,对于输出的管理. (举 ...

  6. ik分词器各版本下载地址

    ik分词器各个版本下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases

  7. Zookeeper-单机/集群安装

    简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少量信息.Hadoo ...

  8. MySQL Migration Toolkit v2.1特别版

    MySQL数据库转换工具MySQL Migration Toolkit v2.1特别版 支持mssql\oracle\access\excel与mysql互换 可以将任何数据源转换成mysql的数据, ...

  9. 洛谷 P1649 [USACO07OCT]障碍路线Obstacle Course

    P1649 [USACO07OCT]障碍路线Obstacle Course 题目描述 Consider an N x N (1 <= N <= 100) square field comp ...

  10. Maven错误:XXX时出错; invalid LOC header (bad signature)的解决方法

    错误原因是该包没下载成功,比如网络问题等因素. 解决方法:进入本地仓库删除该包,然后再执行打包或部署等操作即可.