HDU 5936 Difference 【中途相遇法】(2016年中国大学生程序设计竞赛(杭州))

Difference

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 62    Accepted Submission(s): 19

Problem Description

Little Ruins is playing a number game, first he chooses two positive integers y and K and calculates f(y,K), here

f(y,K)=∑z in every digits of yzK(f(233,2)=22+32+32=22)

then he gets the result

x=f(y,K)?y

As Ruins is forgetful, a few seconds later, he only remembers K, x and forgets y. please help him find how many y satisfy x=f(y,K)?y.

Input

First line contains an integer T, which indicates the number of test cases.

Every test case contains one line with two integers x, K.

Limits
1≤T≤100
0≤x≤109
1≤K≤9

Output

For every test case, you should output ‘Case #x: y‘, where x indicates the case number and counts from 1 and y is the result.

Sample Input

2
2 2
3 2

Sample Output

Case #1: 1
Case #2: 2

Source

2016年中国大学生程序设计竞赛(杭州)

Recommend

liuyiding   |   We have carefully selected several similar problems for you:  5947 5946 5945 5944 5942

Statistic | Submit | Discuss | Note

题目链接:

  http://acm.hdu.edu.cn/showproblem.php?pid=5936

题目大意:

  (y每位上的数字的K次幂之和)

  X=f(y,K)-y。现在给定X和K,求有多少Y满足题意。

  数据范围 

题目思路:

  【中途相遇法】

  数据范围x在[0,109],y的位数不会超过10位。

  所以想直接对半分,先枚举前5位,记下相应的值,再枚举后5位,与前面的匹配看是否能够凑成x,最后统计答案即可。

  一开始用map写,T了。一脸懵逼。

  后来改成将每个出现的值都记下来,排序,正反扫一遍。。过了。

  可以预处理一些操作、运算。

  1 //
  2 //by coolxxx
  3 //#include<bits/stdc++.h>
  4 #include<iostream>
  5 #include<algorithm>
  6 #include<string>
  7 #include<iomanip>
  8 #include<map>
  9 #include<stack>
 10 #include<queue>
 11 #include<set>
 12 #include<bitset>
 13 #include<memory.h>
 14 #include<time.h>
 15 #include<stdio.h>
 16 #include<stdlib.h>
 17 #include<string.h>
 18 //#include<stdbool.h>
 19 #include<math.h>
 20 #pragma comment(linker,"/STACK:1024000000,1024000000")
 21 #define min(a,b) ((a)<(b)?(a):(b))
 22 #define max(a,b) ((a)>(b)?(a):(b))
 23 #define abs(a) ((a)>0?(a):(-(a)))
 24 #define lowbit(a) (a&(-a))
 25 #define sqr(a) ((a)*(a))
 26 #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
 27 #define mem(a,b) memset(a,b,sizeof(a))
 28 #define eps (1e-8)
 29 #define J 10000
 30 #define mod 1000000007
 31 #define MAX 0x7f7f7f7f
 32 #define PI 3.14159265358979323
 33 #define N 14
 34 #define M 100004
 35 using namespace std;
 36 typedef long long LL;
 37 double anss;
 38 LL aans;
 39 int cas,cass;
 40 int n,m,lll,ans;
 41 LL e[N];
 42 LL mi[N][N],c[N][M],d[N][M];
 43 bool cmp(int a,int b)
 44 {
 45     return a<b;
 46 }
 47 void init()
 48 {
 49     int i,j;
 50     for(e[0]=1,i=1;i<11;i++)e[i]=e[i-1]*10;
 51     for(i=0;i<10;i++)
 52     {
 53         mi[i][0]=1;
 54         for(j=1;j<10;j++)mi[i][j]=mi[i][j-1]*i;
 55     }
 56     for(j=1;j<10;j++)
 57     {
 58         for(i=0;i<e[5];i++)
 59             c[j][i]=mi[i/e[4]][j]+mi[i%e[4]/e[3]][j]+mi[i%e[3]/e[2]][j]+mi[i%e[2]/e[1]][j]+mi[i%e[1]][j]-i*e[5],
 60             d[j][i]=mi[i/e[4]][j]+mi[i%e[4]/e[3]][j]+mi[i%e[3]/e[2]][j]+mi[i%e[2]/e[1]][j]+mi[i%e[1]][j]-i;
 61         sort(c[j],c[j]+e[5],cmp);
 62         sort(d[j],d[j]+e[5],cmp);
 63     }
 64 }
 65 int main()
 66 {
 67     #ifndef ONLINE_JUDGE
 68 //    freopen("1.txt","r",stdin);
 69 //    freopen("2.txt","w",stdout);
 70     #endif
 71     int i,j,k;
 72     int x,y,z;
 73     init();
 74 //    for(scanf("%d",&cass);cass;cass--)
 75     for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
 76 //    while(~scanf("%s",s))
 77 //    while(~scanf("%d%d",&n,&m))
 78     {
 79         printf("Case #%d: ",cass);
 80         ans=0;
 81         scanf("%d%d",&n,&m);
 82         for(i=0,j=e[5]-1;i<e[5] && j;)
 83         {
 84             if(c[m][i]+d[m][j]>n)j--;
 85             else if(c[m][i]+d[m][j]<n)i++;
 86             else
 87             {
 88                 x=y=1;
 89                 while(c[m][++i]==c[m][i-1] && i<e[5])x++;
 90                 while(d[m][--j]==d[m][j+1] && j)y++;
 91                 ans+=x*y;
 92             }
 93         }
 94         printf("%d\n",ans-(n==0));
 95     }
 96     return 0;
 97 }
 98 /*
 99 //
100
101 //
102 */

时间: 2024-10-10 04:02:28

HDU 5936 Difference 【中途相遇法】(2016年中国大学生程序设计竞赛(杭州))的相关文章

HDU 5965 扫雷 【模拟】 (2016年中国大学生程序设计竞赛(合肥))

扫雷 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 998    Accepted Submission(s): 289 Problem Description 扫雷游戏是晨晨和小璐特别喜欢的智力游戏,她俩最近沉迷其中无法自拔.该游戏的界面是一个矩阵,矩阵中有些格子中有一个地雷,其余格子中没有地雷. 游戏中,格子可能处于己知和未知的状态

HDU 5963 朋友 【博弈论】 (2016年中国大学生程序设计竞赛(合肥))

朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的:给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行 操作.当一方操作时,他们需要先选择一个不为根的点,满足该点到其父亲的边权为1; 然

HDU 5961 传递 【图论+拓扑】 (2016年中国大学生程序设计竞赛(合肥))

传递 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)   Problem Description 我们称一个有向图G是传递的,当且仅当对任意三个不同的顶点a,,若G中有 一条边从a到b且有一条边从b到c ,则G中同样有一条边从a到c.我们称图G是一个竞赛图,当且仅当它是一个有向图且它的基图是完全图.换句 话说,将完全图每条边定向将得到一个竞赛图.下图展示的是一个有4个顶点的竞

HDU 5969 最大的位或 【贪心】 (2016年中国大学生程序设计竞赛(合肥))

最大的位或 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description B君和G君聊天的时候想到了如下的问题.给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大.其中|表示按位或,即C. C++. Java中的|运算. Input 包含至多10001组测试数据.第一行有一个正整数,表示数据的组数.接下

HDU 5968 异或密码 【模拟】 2016年中国大学生程序设计竞赛(合肥)

异或密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description 晨晨在纸上写了一个长度为N的非负整数序列{ai}.对于这个序列的一个连续子序列{al,al+1,-,ar}晨晨可以求出其中所有数异或的结果 alxoral+1xor...xorar其 中xor表示位异或运算,对应C.C++. Java等语言中的^运算.小璐提出了M个询问,每个询问用

HDU 5943 Kingdom of Obsession 【二分图匹配 匈牙利算法】 (2016年中国大学生程序设计竞赛(杭州))

Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 49    Accepted Submission(s): 14 Problem Description There is a kindom of obsession, so people in this kingdom do things very

HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))

Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 10    Accepted Submission(s): 3 Problem Description There are N bombs needing exploding. Each bomb has three attributes: exploding radius ri,

HDU 5938 Four Operations 【贪心】(2016年中国大学生程序设计竞赛(杭州))

Four Operations Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 22    Accepted Submission(s): 12 Problem Description Little Ruins is a studious boy, recently he learned the four operations! Now

HDU 5933 ArcSoft&#39;s Office Rearrangement 【模拟】(2016年中国大学生程序设计竞赛(杭州))

ArcSoft's Office Rearrangement Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3    Accepted Submission(s): 2 Problem Description ArcSoft, Inc. is a leading global professional computer photogra