Google-APAC2015-Password Attacker
昨天在焦虑中度过了大部分时间,然后刷了10+集火影来弥补被狗吃掉的童年。前天去了De Young美术馆,下一篇blog再po一点图吧。
反正我觉得焦虑是最没有意义的事情。加油啊!
========================================
原题:password attacker
# 1 题目理解:
假设用户使用M个不同的key,去组成长度为N的密码(M<=N),那么有多少种不同的密码。
来看一下test cases。
输入是:
1 1
3 4
5 5
输出是:
Case #1: 1
Case #2: 36
Case #3: 120
比如说M=3, N=4,那么就有36种密码组合。
注意,因为有可能数字太大会溢出,所以所有结果要对1000000007求余。
========================================
#2 算法:
使用dynamic programing。dp[i][j]表示使用i个不同的key去排列长度为j的密码的所有排列方法。
状态转移方程是:
dp[i][j] = i * (dp[i-1][j-1] * j + dp[i][j-1])
这样理解:
考虑长度为j的密码,最后一位肯定是i个key里面的一员,因此有i种情况;
最后一位决定之后,考虑前j-1位,有可能前面没有用过这个key,那么有dp[i-1][j-1]种情况;有可能前面已经使用过这个key,那么有dp[i][j-1]种情况。
========================================
#3 数据结构:
二维数组dp[M+1][N+1]
========================================
#4 代码:
import java.util.*;
import java.io.*;public class Solution {public static void main(String[] args) {File inFile = new File("A-large-practice.in");File outFile = new File("A-large-practice.out");try {BufferedReader br = new BufferedReader(new FileReader(inFile));BufferedWriter bw = new BufferedWriter(new FileWriter(outFile));int T = Integer.parseInt(br.readLine());for (int i = 1; i <= T; i++) {String s = br.readLine();String[] parts = s.split("\\s");int M = Integer.parseInt(parts[0]);int N = Integer.parseInt(parts[1]);bw.write("Case #" + i + ": " + solve(M, N) + "\n");}bw.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/* dynamic programing */public static long solve(int M, int N) {long mod = 1000000007;long[][] dp = new long[M+1][N+1];// base casefor (int j = 1; j <= N; j++) {dp[1][j] = 1;}// dpfor (int i = 2; i <= M; i++) {for (int j = i; j <= N; j++) {dp[i][j] = i * (dp[i-1][j-1] + dp[i][j-1]);dp[i][j] %= mod;}}return dp[M][N];}
}
Google-APAC2015-Password Attacker相关推荐
- 谷歌云使用账号密码_如何使用Google密码检查
谷歌云使用账号密码 Google has a tool designed to securely analyze your passwords against a database of ones t ...
- iphone 同步灰色_如何将我的iPhone中的联系人与Google Gmail帐户同步
iphone 同步灰色 How to Sync the Contacts in My iPhone with Google Gmail Account? 如何将我的iPhone中的联系人与Google ...
- gmail的密码要求_如何更改您的Gmail或Google密码
gmail的密码要求 Changing your Gmail password is a simple process in your web browser or mobile app, and w ...
- 【debug】三星手机com.google.progress.gapps已停止运行
看了很多解决方案,最后还是这篇解决了问题. How To: Fix "process com.google.process.gapps has stopped." Error Me ...
- chrome导出书签和密码_如何在Linux上导出Google Chrome密码?
chrome导出书签和密码 How to export my Google Chrome password on Linux to a human-readable text file? 如何将Lin ...
- metasploit-学习7--显示post的模块的所有post信息
不好意思,由于本文太长,我用程序生成此博文的锚点链接,可是一发布就没有.是不是csdn不支持锚点,还是我操作错误.在这里给大家带来的不便,还请见谅! Name ...
- 领域驱动设计之单元测试最佳实践(二)
领域驱动设计之单元测试最佳实践(一) 介绍完了DDD案例,我们终于可以进入主题了,本方案的测试代码基于Xunit编写,断言组件采用了FluentAssertions,类似的组件还有Shouldly.另 ...
- XSS靶场prompt.ml过关详解
XSS靶场prompt.ml过关详解 前言 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0 ...
- Orkut被XSS蠕虫击中
First Twitter was hacked. Then Facebook went down. Now it's Orkut's turn. Google's social networking ...
- PhEmail:基于Python的开源网络钓鱼攻击工具
PhEmail简介 PhEmail是一款采用Python编程语言开发的开源网络钓鱼邮件工具,它可以帮助研究人员在进行社会工程学测试的过程中自动化地给目标发送网络钓鱼邮件.PhEmail不仅可以同时向多 ...
最新文章
- 比特币现金在与比特币的技术竞争中走在了前列
- 第十七届全国大学生智能车竞赛:英飞凌芯片第二批申请开放
- 第十六届无线节能信标灯规格说明
- Oracle 字符转date类型问题,未解决
- 互联网1分钟 | 0410 腾讯QQ上线陌生人社交入口“扩列”测试;支付宝小程序与UC浏览器打通...
- 利用Guava的Suppliers.memoize实现单例
- iview render的时候可以写控件的基本格式
- html移除click事件绑定,带你了解JQuery中绑定事件(bind())和移除事件(unbind())...
- python 持续集成部署_Jenkins部署git+python项目实现持续集成
- matlab编写基差,到期交割临近 基差迟迟不跌
- java 陷阱_Java基础知识陷阱
- roslaunch与param使用
- 【HDOJ7059】Counting Stars(线段树,区间加,乘,标记)
- PyQt4 UI设计和调用 使用eric6
- 苹果电脑 默认安装jdk位置_CH01_JDK安装和配置(含macOS)
- shell脚本遍历文件夹下所有文件
- 高等数学复习之空间解析几何
- 设置font标签居中显示
- GNS3基础路由技术实验
- 保持健康和活力 - 颈椎病康复指南