ZOJ 3962:Seven Segment Display(思维)

https://vjudge.net/problem/ZOJ-3962

题意:有16种灯,每种灯的花费是灯管数目,代表0~F(十六进制),现在从x开始跳n-1秒,每一秒需要的花费是表示当前的数的花费之和,问n-1秒后这段时间的花费总共是多少。跳到FFFFFFFF之后会跳回00000000.

思路:怀疑人生的题目。如果从平时计算[L,R]的花费,就计算[0,R] - [0,L-1]这样的角度来看,就会好做很多。同样如果跳到1LL<<32之后回到0,也分段考虑。这样写一个函数就可以计算了。

考虑三种东西:

a:跑第i位的时候总共完整跑了几轮的贡献(即0~F)。

b:跑第i位的时候完整跑完之后还剩了多余的几轮的贡献(即0~bit[i])。

c:跑第i位的时候跑完a和b之后还剩一些多余的秒,这个时候显示器是显示bit[i]的,因此要加上bit[i]*剩余的秒。

a和b每次都停留了1LL<<(4 * i)秒。因此都要乘上这个权。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 const LL MOD = 1LL << 32;
 5 int w[] = { 6, 2, 5, 5, 4, 5, 6, 3, 7, 6, 6, 5, 4, 5, 5, 4 };
 6 LL sum[20];
 7
 8 LL solve(LL x) {
 9     if(x < 0) return 0;
10     LL pw = 1, ans = 0;
11 //    printf("x : %lld \n", x);
12     for(int i = 1; i <= 8; i++, pw <<= 4) {
13         LL a = x / (pw * 16) * sum[16]; // 这一位总共完整跑了几轮
14         LL b = sum[x / pw % 16]; // 跑完a轮后还有剩余b次
15         LL c = (x % pw + 1) * w[x / pw % 16]; // 当前的这一位的这一个数要多加几次,0也算一个所以+1
16         ans += (a + b) * pw + c; // a和b每次都会停留pw秒
17     }
18     return ans;
19 }
20
21 int main() {
22     sum[0] = 0;
23     for(int i = 1; i <= 16; i++) sum[i] = sum[i-1] + w[i-1];
24     int t; scanf("%d", &t);
25     while(t--) {
26         LL n, x;
27         scanf("%lld%llx", &n, &x);
28         if((x + n - 1) >= MOD) { // 分成 x 到 FFFFFFFF 和 0 到 (x + n - 1) % MOD
29             printf("%lld\n", solve(MOD - 1) - solve(x - 1) + solve(x + n - 1 - MOD));
30         } else {
31             printf("%lld\n", solve(n + x - 1) - solve(x - 1));
32         }
33     }
34     return 0;
35 }
36 /*
37 3
38 5 89ABCDEF
39 3 FFFFFFFF
40 7 00000000
41 */
时间: 2024-10-16 03:23:59

ZOJ 3962:Seven Segment Display(思维)的相关文章

zoj 3962 Seven Segment Display(数位dp)

Seven Segment Display Time Limit: 2 Seconds      Memory Limit: 65536 KB A seven segment display, or seven segment indicator, is a form of electronic display device for displaying decimal numerals that is an alternative to the more complex dot matrix

2017浙江省赛 E - Seven Segment Display ZOJ - 3962

地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3962 题目: A seven segment display, or seven segment indicator, is a form of electronic display device for displaying decimal numerals that is an alternative to the more complex dot matrix

ZJ省赛 2017 E.Seven Segment Display

数码管从某个状态顺序转移N个状态 计算总共有多少个数码管被点亮 N<=10^9 观察数码管的变化规律,有明显的周期和重复,利用这个性质,计算相对于初始状态,某一位上的某个状态重复了多少次,就可以在常数时间内求得. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<vector> #include<queue> #inc

neu 1492 Segment Balls(思维 水)

http://acm.neu.edu.cn/hustoj/problem.php?id=1492 题意: 有n个盒子 现在有两种操作: 1 在序号为x的倍数的盒子里放y个球 2 查询序号x到y的盒子里的球的总数 思路: 当时以为线段数 而且没看明白 number is multiple of B 就放弃了 其实 题目中给出 1 <= B ,C <= 10 已经暗示了这题不需要线段树 只需要在操作1 时 a[x]+=y; 再通过 (y/i-(x-1)/i)*a[i]  来计算总量 过了时间竟然不

ZOJ - 3983 - Crusaders Quest(思维 + 暴力)

题意: 给出一个字符串,长度为9,包含三种各三个字母"a","g","o",如果一次消除连续三个一样的分数+1,消完自动向左补齐 其中可以消去任意字母,以求得更大的分数 思路: 1.如果能够消去两个xxx那么一定能消去第三个,那么答案为3 2.如果只能找到一个xxx,那么答案一定是 2,因为必须舍弃一个消除才能得到一组xxx 3.没有找到xxx,那么有两种情况,一种是1,一种是2,枚举三个字母,暴力删除后进行判断xxx的存在,如果存在,那么答案是

ZOJ 3962

就是统计1~n中出现的各个数字的次数,当然是在16进制下. 不过有个区间问题的小技巧,统计从 [x,y] 可以转换成 从 [1,y] 减去 [1,x-1]. 不过要分类讨论一下,因为有可能会出现溢出,从ffffffff +1 得到 00000000 就是溢出了. 因为 n < 1e9 所以只会溢出一次. #include<cstdio> #include<cmath> #include<cctype> const int cost[] = {6,2,5,5,4,5

MARS3.6 Programming

An Assembly Language I.D.E. To Engage Students Of All Levels * A Tutorial *2007 CCSC: Central Plains Conference Pete Sanderson, Otterbein College, [email protected] Ken Vollmar, Missouri State University, [email protected] ? ? MARS is a software simu

第十四届浙江省赛

题目真的是从易到难的顺序,而且跨度非常合理,只是看到榜单上后5题只有一支队做出来了一个,其他的没人做出来啊.. A - Cooking Competition 水题. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int n, a; 5 6 int main() { 7 // freopen("in", "r", stdin); 8 int T; 9 scanf("%d",

2019省赛训练组队赛4.9周二 2017浙江省赛

A - Cooking Competition "Miss Kobayashi's Dragon Maid" is a Japanese manga series written and illustrated by Coolkyoushinja. An anime television series produced by Kyoto Animation aired in Japan between January and April 2017. In episode 8, two