某deed笔试题
1. 删除ra,输入s,然后从前往后扫,遇到直接删除,O(n),算水题吧。
2. 矩阵乘法,看完题,感觉这么简单,估计有什么套路,仔细再读一遍,发现真是水题,50*50*50=125000,在2s时限内完全可以,而且数据范围很小,最大也是125000,不需要long long,直接写。
3. 读完题,看数据范围,maxn = 6, 6!=720, 然后是运算符的方式有2^5 = 32,然后总的复杂度为720 * 32 * 5 = 115200,这在1s的时限内完全可以,全排列可以用next_pemutation,运算符可以用二进制枚举,代码如下,(最后一个测试数据wa,我没找出来,后来换递归的ac了)。(找到错误了,比如 n = 1, k = 1, a1 = 10; 这里初始值应该设置为INT_MAX,结果才正确)。
/*
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 + ;
int a[];
int n, k;
void solve() {
cin >> n >> k;
for (int i = ; i < n; i++) cin >> a[i];
sort(a, a + n);
int res = k;
do {
if(res == ) break;
for (int i = ; i < ( << n - ); i++) {
int s = a[];
for (int j = ; j < n - ; j++) {
if(i >> j & ) {
s += a[j + ];
} else {
s *= a[j + ];
}
}
if(abs(s - k) < res) res = abs(s - k);
}
} while(next_permutation(a, a + n));
cout << res << endl;
}
int main() {
freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
solve();
return ;
}
4. 先看懂题意,然后考虑怎么做,我没做出来!
分析:1. 考虑最后的结果不是1010就是0101,然后可以考虑从0000怎么转移过去,但是考虑n=1e5,数据范围发,状态数非常多,这种方法无法实现。
2. 考虑子问题性质,长问题是否可以转化为短问题。找一些短的小例子,划一下从0转移到结果的情况。然后就是动态规划dp,考虑长度dp[n],
3. dp[0] = 1, dp[1] = 1, dp[2] = 1, dp[3] = 5.0/3,dp[4] = 2.然后考虑5的时候怎么转移,枚举第一个涂的位置,下标从1-n,然后比如(10000,01000,00100,00010,00001),1代表涂黑,接下看怎么考虑,对于10000,10无法改变,只需计算000,右边的3个0的期望黑色的个数,而这个期望已经算出来,由于先是涂的第一个黑色,右边三个0算的时候还要乘一个转移概率1/5,然后2边期望加起来。这里为什么需要加起来,那就需要考虑期望的性质,这里是期望黑色球的个数,可以把10000分开2段,总的期望等于左端的期望加上右端的期望,就是总的期望。 最后,第一个涂的位置有5种,然后把所有的期望加起来即可。下面用公式推导一下。
dp[n] = ∑ni=1 (dp[i - 1 - 1] / n + dp[n - i - 1] / n + 1/n) = ∑ni=1 (dp[i - 1 - 1] / n + dp[n - i - 1] / n) + 1 = 2 / n * ∑n-2i=1 (dp[i]) + 1.
就是上面的公式,这个公式应该不难理解吧,接下来,就可以直接码代码了。
/*
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 = 1e5 + ;
int n;
double dp[maxn];
void solve() {
dp[] = ;
dp[] = dp[] = ;
dp[] = 5.0 / ; dp[] = ;
cin >> n;
if(n < ) {
printf("%.10f\n", dp[n]);
return;
}
double s = dp[] + dp[] + dp[];
for (int i = ; i <= n; i++) {
dp[i] = s * / i + ;
s += dp[i - ];
}
printf("%.10f\n", dp[n]); }
int main() {
//freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
solve();
return ;
}
感觉遇到题,还是先想清楚,有什么性质,复杂度满足要求么,最后才是码代码!
某deed笔试题的更多相关文章
- 对Thoughtworks的有趣笔试题实践
记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...
- 从阿里巴巴笔试题看Java加载顺序
一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...
- 我设计的ASP.NET笔试题,你会多少呢
本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...
- C#经典笔试题-获取字符串中相同的字符以及其个数
public Dictionary<char,int> GetStrSameAs(string str){ //将字符串转换成一个字符数组. char[] charArray=str.To ...
- flhs笔试题-回家上机实践
这是最近参加的一个公司的笔试题,回家上机写了下代码,希望对有需要的小伙伴有用,简单实现字符串和数组在指定位置的插入: package org.flhs; import com.google.commo ...
- 也许你需要点实用的-Web前端笔试题
之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自己的东西,共勉. Web前端笔试题 Html+css 1.对WEB标准以及w ...
- [c#基础]关于try...catch最常见的笔试题
引言 在翻看之前总结的常见面试题中,关于try...catch异常处理的还是蛮多了,今天看到这个面试题,也就重新学习一下. try..catch语法 try-catch语句由一个try块后跟一个或多个 ...
- js作用域之常见笔试题,运行结果题
笔试题中经常有运行结果题,而大多体型都是围绕作用域展开,下面总结了几种相关的题: 外层的变量函数内部可以找到,函数内部的变量(局部变量)外层找不到. function aaa() { var a = ...
- 【Android】一道Android OpenGL笔试题
一道Android OpenGL笔试题 SkySeraph May. 5th 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点:www.sky ...
随机推荐
- 智能电视TV开发---客户端和服务器通信
在做智能电视应用的时候,最头疼的就是焦点问题,特别是对于个人开发者,没有设备这是最最头疼的事情了,在没有设备的情况下,怎么实现智能电视应用呢,接下来我是用TV程序来做演示的,所以接下来的所有操作是在有 ...
- 《MEF程序设计指南》博文汇总
<MEF程序设计指南>博文汇总 在MEF之前,人们已经提出了许多依赖注入框架来解决应用的扩展性问题,比如OSGI 实现以Spring 等等.在 Microsoft 的平台上,.NET Fr ...
- JAVA常用设计模式整理
设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把 ...
- svn 如何解决冲突
项目中,往往不止你一人开发,多人开发,难免会有代码的冲突.彼此间谁也不能保证不会修改同个文件.如果修改了同个方法的内容.这时提交到svn是会提示代码冲突的. 当然,冲突是可控的,但不能避免.每次写代码 ...
- MySQL主从复制技术(纯干货)
1.复制配置 主机一定要开启二进制日志(这里建议配置RBR) 每个主机和每个从机一定要配置一个位移的id,即server-id 每个从机配置一定要包含主机名称,日志名称,和位置 ...
- Sublime Text 超好用的侧栏插件SideBarEnhancements
SideBarEnhancements插件有效地改进了Sublime Text的侧边栏.安装插件后在侧边栏上点击右键,可以找到一下新功能:在资源管理器中打开.新建文件.新建文件夹.以…打开.在浏览器中 ...
- Centos中安装vim
Centos, 默认没有安装VIM, 所以要当然要安装了, 直接yum install vim是不行的, 首先: yum install vim* 会看到vim-enhanced这个包,没错, 我们要 ...
- javax.naming.NameNotFoundException:Name[ XXX] is not bound in this context.
在用局部数据源去连数据库的时候,在本地的项目中,都是可以的,可是一部署到服务器上,就报错了. 报的错误是:javax.naming.NameNotFoundException:Name[ XXX] i ...
- android学习日记03--常用控件checkbox/radiobutton
常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...
- innobackupex --slave-info参数的含义和适用场景
http://blog.itpub.net/28916011/viewspace-1969135/ 我有个问题一直没弄明白,就是innobackupex里面的--slave-info这个参 ...