ZOJ3962 数位DP
来源:互联网 发布:安卓6.0优化教程 编辑:程序博客网 时间:2024/06/17 01:08
(units/s)
(units/s)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=5d683cc61a7118088d55a43b1be988f5173922d6.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=e8478bc49265d4effc414b2d25101183df2d60b2.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=cab7b04984d3375d87d760b4f5613b8136f43798.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=0be79f0970124132b264a8208ac0e00ff477231e.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=9fe6583ddebb47afa89e989e43cc6b50f1aa7612.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=3f3bb9b9140f82984392e725d9808d5438b088c1.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=96418fdacfb5bb2fd1e92d9f77fcd61f1abf76a8.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=4e65393b6c2cb5982918f5b29cd4e78cd97000df.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=a1a8be0f7c32224a9985275e4eae20d8b6bd3305.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=a1c967d4791ee962e89d392f1b77967ad42cdb82.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=3aa6cdd5436d6d5f102844bf5972ac1aff5a81c3.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=2c5e81790d804f367e9958f86ebc17e65390916c.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=9d608146e7e4392d5690101a2fa375c4fa97c711.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=a8e6d1eed92d7ea7998de878a616c62a68121538.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=971d49704e2e5013adc7072e4f891e717ef609da.png)
![](http://acm.zju.edu.cn/onlinejudge/showImage.do?name=fdc4b24d21030226973760f58e25dde914d1f3eb.png)
题意,电子显示器,初始时间m , 结束时间m+n-1 ,若时间超过FFFFFFFF,则从00000000开始计算。
典型的数位DP,
import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.Arrays;import java.util.StringTokenizer;public class Main {public static void main(String[] args) {new Task().solve() ; }}class Task {InputReader in = new InputReader(System.in);PrintWriter out = new PrintWriter(System.out);long[][] dp = new long[8][60] ; int[] bit = new int[8] ; long DP(int pos , int digSum , boolean isend){ if(pos < 0){ return digSum ; } if(! isend && dp[pos][digSum] != -1) return dp[pos][digSum] ; long sum = 0L ; int d = isend ? bit[pos] : 15 ; for(int i = 0 ; i <= d ; i++){ sum += DP(pos-1 , digSum + dig[i] , isend && (i == d) ) ; } if(! isend) dp[pos][digSum] = sum ; return sum ; } int[] dig = {6 , 2 , 5 , 5 , 4 , 5 , 6 , 3 , 7 , 6 , 6 , 5 , 4 , 5 , 5 , 4} ; char[] hex = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'} ; long sum(String n){ for(int i = 0 ; i < 8 ; i++) bit[7-i] = to(n.charAt(i)) ; return DP(7 , 0 , true ) ; } int to(char c){ if('0' <= c && c <= '9') return c - '0' ; else return c - 'A' + 10 ; } long turnBig(String s){ long num = 0 ; for(int i = 0 ; i < s.length() ; i++){ num = num * 16 + to(s.charAt(i)) ; } return num ; } String turnHex(long num){ String s = "" ; while(num > 0){ int mod = (int) (num % 16) ; s = hex[mod] + s ; num = num / 16 ; } while(s.length() < 8) s = '0' + s ; return s ; } long calc(long l , long r){ if(l == 0) return sum(turnHex(r)) ; return sum(turnHex(r)) - sum(turnHex(l-1)) ; } void solve(){ for(int i = 0 ; i <= 7 ; i++){ Arrays.fill(dp[i] , -1L) ; } long limit = turnBig("FFFFFFFF") ; int t = in.nextInt() ; while(t-- > 0){ long n = in.nextLong() ; long left = turnBig(in.next()) ; long right = left + n -1 ; long ans ; if(right <= limit) ans = calc(left , right) ; else{ ans = calc(left, limit) + calc(0 , right - limit - 1) ; } out.println(ans); } out.flush(); } }class InputReader {public BufferedReader reader;public StringTokenizer tokenizer;public InputReader(InputStream stream) {reader = new BufferedReader(new InputStreamReader(stream), 32768);tokenizer = new StringTokenizer("");}private void eat(String s) {tokenizer = new StringTokenizer(s);}public String nextLine() {try {return reader.readLine();} catch (Exception e) {return null;}} public boolean hasNext() {while (!tokenizer.hasMoreTokens()) {String s = nextLine();if (s == null)return false;eat(s);}return true;}public String next() {hasNext();return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}public double nextDouble() {return Double.parseDouble(next());}public BigInteger nextBigInteger() {return new BigInteger(next());}}
0 0
- ZOJ3962 数位DP
- 【zoj3962】Seven Segment Display(数位dp)
- ZOJ3962-Seven Segment Display(数位dp)
- 数位dp
- 数位DP
- 数位DP
- 数位dp
- 数位dp
- 数位dp
- 数位DP
- 数位dp
- 数位DP
- 【数位DP】
- 数位DP
- 数位dp
- 数位dp
- 数位DP
- 数位DP
- Linux超实用的几个命令及例子(1)
- 泛型概述
- 泛型的概述
- 数据库
- 构造函数 及复制构造函数
- ZOJ3962 数位DP
- Leetcode-标签为Tree 404. Sum of Left Leaves
- 《C++之那些年踩过的坑(二)》
- unity联网模块制作
- 《深入理解Java虚拟机》Java内存区域与内存溢出异常
- 项目零散知识积累(三)
- Ubuntu下使用VI编辑文件必知的常用命令
- 欢迎使用CSDN-markdown编辑器
- JS浅克隆与深克隆