Another palindrome related problem. Actually nothing too theoretical here, but please keep following hints in mind:

1. How to check whether a natural number is Palindrome
  Not sure whether there's closed form to Palindrome, I simply used a naive algorithm to check: log10() to get number of digits, and check mirrored digits.

2. Pre calculation
  1<=a<=b<=1000. so we can precalculate all Palindromes within that range beforehand.

3. Understand problem statement, only start from a Palindrome
  For each range, it must start from a Palindrome - we can simply skip non-Palindromes. And don't forget to remove all tailing non-Palindromes.

// 692 Fruit Farm
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstdlib>
using namespace std; /////////////////////////
#define gc getchar_unlocked
int read_int()
{
char c = gc();
while(c<'' || c>'') c = gc();
int ret = ;
while(c>='' && c<='') {
ret = * ret + c - ;
c = gc();
}
return ret;
}
int read_string(char *p)
{
int cnt = ;
char c;
while((c = gc()) == ' '); // skip spaces
//
while(c != )
{
p[cnt ++] = c;
c = gc();
}
return cnt;
}
void print_fast(const char *p, int len)
{
fwrite(p, , len, stdout);
}
/////////////////////////
bool isPalin(int n)
{
if(n >= && n < ) return true; // Get digit length
int nDigits = + (int)floor(log10(n * 1.0)); // Get separated digits
int digits[] = {};
for(int i = ; i < nDigits; i ++)
{
int d = n / (int)pow(10.0, i*1.0) % ;
digits[i] = d;
} // Check digits
bool bEven = nDigits % == ;
int inxLow = nDigits / - ;
int inxHigh = (nDigits / ) + (bEven ? : );
int nDigits2Check = nDigits / ;
for(int i = ; i < nDigits2Check; i ++)
{
if(digits[inxLow] != digits[inxHigh]) return false;
inxLow --; inxHigh ++;
}
return true;
} bool Palin[] = {false};
void precalc_palin()
{
for(int i = ; i <= ; i ++)
{
if(isPalin(i))
{
Palin[i-] = true;
//printf("%d ", i);
}
}
//printf("\n");
} void calc(int a, int b, int l)
{
int rcnt = ; int mya = , myb = ;
for(int i = a; i <= b; i++)
{
if(!Palin[i-]) continue;
//printf("At %d\n", i);
int cnt = ; int bound = min(b, i + l - );
for(int j = i; j <= bound; j ++)
{
if(Palin[j-]) cnt ++;
}
//printf("[%d, %d] = %d\t", i, bound, cnt);
if(cnt > rcnt)
{
rcnt = cnt; mya = i; myb = bound;
}
}
// shrink
if(rcnt > )
{
while(!Palin[myb-]) myb--;
printf("%d %d\n", mya, myb);
}
else
{
printf("Barren Land.\n");
}
} int main()
{
// pre-calc all palindrome in [1-1000]
precalc_palin(); int runcnt = read_int();
while(runcnt--)
{
int a = read_int();
int b = read_int();
int l = read_int();
calc(a, b, l);
} return ;
}

最新文章

  1. Java实现单链表的各种操作
  2. ACM ICPC Vietnam National Second Round
  3. SQLServer - 约束
  4. 玩转正则之highlight高亮
  5. c# 正则表达式 匹配中括号&amp;颜色过滤
  6. javascript优化--05模式(函数)
  7. ZOJ-3929 Deque and Balls (DP+找规律)
  8. bat命令之for命令详解
  9. 在页面中使用Eval的两种方案
  10. delphi Edit - TActionList
  11. iOS夯实:内存管理
  12. js实现克隆一个对象
  13. H - Highways - poj 1751(prim)
  14. 07-09 07:28:38.350: E/AndroidRuntime(1437): Caused by: java.lang.ClassNotFoundException: Didn&#39;t find class &quot;com.example.googleplay.ui.activity.MainActivity&quot; on path: DexPathList[[zip file &quot;/data/app/c
  15. centos 6.5下安装文件上传下载服务
  16. C#使用互斥量(Mutex)实现多进程并发操作时进程间的同步操作(进程同步)
  17. ng-book札记——路由
  18. 爱上python之盲注探测脚本
  19. codeforces630C
  20. 使用MedleyText与Syncthink自建云笔记

热门文章

  1. python解析smart结构数据
  2. 235. Lowest Common Ancestor of a Binary Search Tree
  3. Codeforces Round #369 (Div. 2) A B 暴力 模拟
  4. 使用 Spring Security 保护 Web 应用的安全
  5. Q郵箱轉移自定義目錄中的郵件
  6. JavaWeb学习记录(二十一)——国际化处理
  7. apache开启url rewrite模块
  8. 记录Cat类的个体数目
  9. Git入门指南十一:Git branch 分支与合并分支
  10. Hadoop 安装记录