老司机的奇怪noip模拟T2-huangyueying

2. 黄月英
(huangyueying.cpp/c/pas )
【问题描述】
xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考。
在某天无聊学术之后, xpp 打开了 http://web.sanguosha.com, 准备用他心爱的黄月英
虐人。进入了八人身份局,作为一位主公,xpp 果断选了黄月英,用黄月英挑 7 人。
xpp 为什么喜欢黄月英这个武将呢?因为集智是个很牛逼的技能。
集智——每当你使用一张非延时类锦囊(在它结算之前)你可以立即摸一张牌。
可见集智这个技能如果用得好那么牌是摸不完的。于是 xpp 把 7 个人全部轻松干掉。
虽然 xpp 的集智永远都能摸锦囊, 但是他想到了这样一个问题: 由于黄月英是一个富有
智慧的人,所以 xpp 也要想一个富有智慧的问题,具体说来,他对牌上的数字产生了兴趣,
于是他想知道,牌上每个数字出现过多少次。
当然,要算牌上的数字太简单了。所以 xpp 要扩大范围。
xpp 正在考虑这样一个问题:从一个数字 a 到另一个数字 b 之间,从 0 到 9 的每个数字
出现过多少次。
xpp 智商过于强大,不屑于想此等低端问题,然后你就要把这道题做出来。
【输入】
输入文件名为 huangyueying.in。
共一行,每行两个整数,分别为 a,b。
【输出】
输出文件名为 huangyueying.out。
输出共一行,包含 10 个整数,分别代表从 0 到 9 的数字各出现过多少次。
【输入输出样例】
huangyueying.in huangyueying.out
24 69 4 4 10 14 15 15 15 5 5 5
【数据范围】
对于 30%的数据,a≤b≤1000000。
对于 100%的数据,a≤b≤10^12。

————————————————题解

一道极为水的数位dp,但我一直没调出来

原先统计的时候没有统计前缀0,单纯算每个数,觉得去前导0太麻烦,然后就再也调不通了,后来看题解发现其实去的话也不是那么麻烦……然后就过了

【老司机的数据十分坑】

就是我们算4997,我们加上000-

  1 #include <iostream>
  2 #include <string.h>
  3 #include <cstdlib>
  4 #include <cstdio>
  5 #include <algorithm>
  6 #include <cstring>
  7 #include <vector>
  8 #include <ctime>
  9 #define ivorysi
 10 #define mo 10007
 11 #define siji(i,x,y) for(int i=(x);i<=(y);i++)
 12 #define gongzi(j,x,y) for(int j=(x);j>=(y);j--)
 13 #define xiaosiji(i,x,y) for(int i=(x);i<(y);i++)
 14 #define sigongzi(j,x,y) for(int j=(x);j>(y);j--)
 15 #define ivory(i,x) for(int i=head[x];i;i=edge[i].next)
 16 #define pii pair<int,int>
 17 #define fi first
 18 #define se second
 19 #define inf 10000000
 20 using namespace std;
 21 typedef long long ll;
 22 ll dp[15][15][15];//dp(i,j,k)i位数,j开头,k的个数
 23 ll num[12]={//为啥我sb到打了这个表
 24     0,
 25     10,
 26     100,
 27     1000,
 28     10000,
 29     100000,
 30     1000000,
 31     10000000,
 32     100000000,
 33     1000000000LL,
 34     10000000000LL,
 35     100000000000LL
 36 };
 37 void init() {
 38     siji(i,0,9) {
 39         dp[1][i][i]=1;
 40     }
 41     siji(i,2,12) {
 42         siji(j,0,9) {
 43             siji(k,0,9) {
 44                 siji(h,0,9) {
 45                     dp[i][j][k]+=dp[i-1][h][k];
 46                 }
 47             }
 48             dp[i][j][j]+=num[i-1];
 49         }
 50     }
 51     siji(i,1,12) {
 52         siji(j,1,9) {
 53             siji(k,0,9) {
 54                 dp[i][j][k]+=dp[i][j-1][k];
 55             }
 56         }
 57     }
 58 }
 59 ll a,b;
 60 ll ansa[15],ansb[15];
 61 void query(ll c,ll *arr) {
 62     if(c==-1) return ;
 63     ll tmp=c;
 64     int len=0,x[15];
 65     while(tmp) {
 66         x[++len]=tmp%10;
 67         tmp/=10;
 68     }
 69     gongzi(i,len,2) {
 70         if(x[i]!=0) {
 71             siji(k,0,9){
 72                 arr[k]+=dp[i-1][9][k];
 73             }
 74             if(i==len) siji(k,1,i-2) arr[0]-=num[k];
 75             /*
 76                 假如我们做的是000-999
 77                 我们要搞掉000-009两次0
 78                 搞掉010-099一次0
 79                 这要合起来我们搞一遍000-099一次0(100个0)
 80                 搞000-009一次0(10个0)
 81             */
 82             if(i!=len)arr[0]+=num[i-1];
 83         }
 84         xiaosiji(p,1,x[i]) {
 85             siji(k,0,9) {
 86                 arr[k]+=dp[i-1][9][k];
 87             }
 88             arr[p]+=num[i-1];
 89         }
 90         arr[x[i]]+=c%num[i-1]+1;//加上这一位后面数
 91     }
 92     siji(i,0,x[1]) ++arr[i];
 93 }
 94 int main() {
 95 #ifdef ivorysi
 96     freopen("huangyueying.in","r",stdin);
 97     freopen("huangyueying.out","w",stdout);
 98 #else
 99     freopen("f1.in","r",stdin);
100 #endif
101     scanf("%I64d%I64d",&a,&b);
102     init();
103     query(a-1,ansa);
104     query(b,ansb);
105     siji(i,0,9) {
106         printf("%I64d%c",ansb[i]-ansa[i]," \n"[i==9]);
107     }
108     return 0;
109 }

999(搞掉前缀0),加上1000-1999,加上2000-2999,加上3000-3999,加上998个4,然后我们再搞下一位……第一位4我们可以扔掉不管

正确性写个暴力对拍就知道了

时间: 2024-10-14 04:26:42

老司机的奇怪noip模拟T2-huangyueying的相关文章

老司机的奇怪noip模拟T1-guanyu

1. 关羽(guanyu.cpp/c/pas )[问题描述]xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考.在某天无聊学术之后, xpp 打开了 http://web.sanguosha.com, 准备用他心爱的关羽虐人.进入了八人身份局,作为一位主公,xpp 果断选了关羽,用关羽挑 7 人.xpp 为什么喜欢关羽这个武将呢?因为武圣是个很牛逼的技能.武圣——你可以将你的任意一张红桃或方片牌当杀使用或打出.可见武圣这个技能如果用得好那么是可以轻松杀死别人的. 于是 xpp

老司机的奇怪noip模拟T3-zhugeliang

3. 诸葛亮(zhugeliang.cpp/c/pas )[问题描述]xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考.在某天无聊学术之后, xpp 打开了 http://web.sanguosha.com, 准备用他心爱的诸葛亮虐人.进入了八人身份局,作为一位主公,xpp 果断选了诸葛亮,用诸葛亮挑 7 人.xpp 为什么喜欢周瑜这个武将呢?因为观星是个很牛逼的技能.观星——回合开始阶段, 你可以观看牌堆顶的 X 张牌 (X 为存活角色的数量且最多为 5) ,将其中任意数

数列 题解(NOIP模拟T2)

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. [题目描述] a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1]  (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. [输入格式] 第一行一个整数T,表示询问个数. 以下T行,每行一个正整数n. [输出格式] 每行输出一个非负整数表示答案. [样例输入] 3 6 8 10 [样例输出] 4 9 19 [数据范围] 对于30%的数据 n<=100: 对于60%的数据 n<=

2017 9 11 noip模拟赛T2

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=205; int map[N][N]; int d[N],tag[N],book[N],f[N]; int n,m; void work(int x) { memset(d,63,sizeof(d)); memset(book,0,sizeof(book)); memset(f,0,sizeof(

Android老司机搬砖小技巧

作为一名Android世界的搬运工,每天搬砖已经够苦够累了,走在坑坑洼洼的道路一不小心就掉坑里了. SDK常用工具类 Android SDK中本身就拥有很多轮子,熟悉这些轮子,可以提高我们的搬砖效率. android.text.TextUtils 字符串操作常用方法:isEmpty() ,join(),split()等 if(!TextUtils.isEmpty(text)){ //do something } android.webkit.URLUtil 链接相关常用方法:isHttpUrl(

NOIP模拟17.8.17

NOIP模拟17.8.17 A 小 G 的字符串文件名 输入文件 输出文件 时间限制 空间限制str.pas/c/cpp str.in str.out 1s 128MB[题目描述]有一天,小 L 给小 G 出了这样一道题:生成一个长度为 n 的.全由小写英文字母构成的字符串,只能使用 k 种字母.要求满足:• 字符串中相邻的两个字母不能相同.• 必须出现恰好 k 种不同的字母.这样的合法字符串可能有很多,小 L 让小 G 输出字典序最小的那个.小 G 太笨啦,不会做这道题,希望你帮帮他.[输入格

FJNU 1176 汪老司机(DP or 建图+最短路)

1196: 汪老司机 Time Limit: 1000 MS         Memory Limit: 257792 KB 64-bit interger IO format: %lld        Java class name: Main Prev Submit  Discuss Next 汪老司机是实验室出了名的老司机,早在大一就拿到了驾照,每年的暑假他都会带家人开车出游,今年的暑假也不例外,汪老司机今年准备带家人去平潭游玩,汪老司机的家离平潭有两条路,每条路都存在n个路段,两条路的n

Juniper老司机经验谈(SRX防火墙NAT与策略篇)视频课程上线了

继前面的<Juniper老司机经验谈(SRX防火墙优化篇)>之后,Juniper老司机经验谈(SRX防火墙NAT与策略篇)第二部视频课程也录制上线了 1.两个课程完全独立又相结合, SRX防火墙优化篇是针对防火墙双机.配置优化内容. SRX防火墙NAT与策略篇则是针对防火NAT.策略内容 . 两部除了前几4单节基础理论与模拟环境搭建部分一样外,其他内容完全不重叠. 2.本课程内容: 大家在QQ群.论坛里经常提的问题,许多人对SRX使用中NAT\策略问题不是很理解,实际工作中碰见太多问题,惹出了

NOIP模拟 17.8.18

NOIP模拟17.8.18 A.小菜一碟的背包[题目描述]Blice和阿强巴是好朋友但萌萌哒Blice不擅长数学,所以阿强巴给了她一些奶牛做练习阿强巴有 n头奶牛,每头奶牛每天可以产一定量的奶,同时也需要一定量的草作为饲料对于第 i头奶牛来说,它每天可以产 vi升的奶,同时需要 wi千克的草作为饲料现在来自蚯蚓国的九条可怜想借一些奶牛,使借走的这些奶牛每天的总产奶量最大,但九条可怜很穷,每天最多只能提供W千克的草作为饲料,而且她还需要对付跳蚤国的神刀手,所以她把这个问题交给了阿强巴,不不不……阿