HDU 1934 特殊数字
有两种车牌号。让你判断第二种是不是在第一种之后且在第一种出Kth之前的车牌号。
本解中是把前面的字母看成一位十进制的数。自己是一个26或者21进制的数。如果比较时有两种。那么第一种和第一种的最后一个比。第二种和第二种的第一种比。第一种的最后一个 和 第二种的第一个 相差1.。那么。两差相加再加1就是这两个数的差了。
因为没有排除前一个是一种。后一个是第二种的情况RE了好久。
感觉像一个模拟题、但是转换成数字那。又觉得很巧妙。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
using namespace std; char l1[] = {"ZZZ9999"};
char l2[] = {"BBBBB00"};
char temp[] = {"BDEFGHJKLNOQRSTUVWXYZ"};
char error[] = {"ACMPI"}; long long ask(char a[], char b[]) // 求两个数字只差。实际上只有两种。
{
long long sum = , suma = , sumb = ;
if (a[]>='' && a[]<='' && b[]>='' && b[]<='')
{
for (int i=; i<; ++i)
{
suma += (a[i]-'A')*pow(, -i);
}
suma *= ;
for (int i=; i<; ++i)
{
suma += (a[i]-'')*pow(, -i);
}
for (int i=; i<; ++i)
{
sumb += (b[i]-'A')*pow(, -i);
}
sumb *= ;
for (int i=; i<; ++i)
{
sumb += (b[i]-'')*pow(, -i);
}
sum = suma - sumb; // 传参时 a[]是SM b[]是SI.
}
else if (a[]>='A' && a[]<='Z' && b[]>='A' && b[]<='Z')
{
for (int i=; i<; ++i)
{
int tempc = ;
for (int j=; j<; ++j)
{
if (a[i] == temp[j])
{
tempc = j;
break;
}
}
suma += tempc*pow(, -i);
}
suma *= ;
suma += (a[]-'')* + (a[]-'');
for (int i=; i<; ++i)
{
int tempc = ;
for (int j=; j<; ++j)
{
if (b[i] == temp[j])
{
tempc = j;
break;
}
}
sumb += tempc*pow(, -i);
}
sumb *= ;
sumb += (b[]-'')* + (b[]-'');
sum = suma - sumb;
}
else
{
suma = ask(a, l2);
sumb = ask(l1, b);
sum = suma + sumb + ;
}
return sum;
} int check(char s[]) // 判断第二个字符串是否合法
{
bool ok1 = true;
bool ok2 = true;
if (s[]>='A' && s[]<='Z')
{
for (int i=; i<; ++i)
{
if (s[i] == 'A' || s[i] == 'C' || s[i] == 'I' || s[i] == 'M' || s[i] == 'P')
return ;
}
}
for (int i=; i<; ++i)
{
if (s[i]<'A' || s[i]>'Z')
{
ok1 = false;
break;
}
}
for (int i=; i<; ++i)
{
if (s[i]<'' || s[i]>'')
{
ok1 = false;
break;
}
}
for (int i=; i<; ++i)
{
if (s[i]<'A' || s[i]>'Z')
{
ok2 = false;
break;
}
}
for (int i=; i<; ++i)
{
if (s[i]<'' || s[i]>'')
{
ok2 = false;
break;
}
}
if (ok1) return ;
if (ok2) return ;
return ;
} int main()
{
long long int c;
char sm[], si[];
while(cin >> sm >> si >> c)
{
if (sm[] == '*' && si[] == '*' && c == )
break;
if (!check(si))
{
cout << "N\n";
continue;
}
if (si[] >= '' && si[] <= '' && sm[] >= 'A' && sm[] <= 'Z')
{
cout << "N\n";
continue;
}
long long ans = ask(si, sm);
if (ans> && ans<=c)
{
cout << "Y\n";
}
else cout << "N\n";
}
return ;
}
HDU 1934 特殊数字的更多相关文章
- hdu acm 1028 数字拆分Ignatius and the Princess III
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- HDOJ(HDU) 2178 猜数字(题意有点难理解、、、)
Problem Description A有1数m,B来猜.B每猜一次,A就说"太大","太小"或"对了" . 问B猜n次可以猜到的最大数. ...
- HDU 1172 猜数字(DFS)
猜数字 Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- HDU 1934 树状数组 也可以用线段树
http://acm.hdu.edu.cn/showproblem.php?pid=1394 或者是我自己挂的专题http://acm.hust.edu.cn/vjudge/contest/view. ...
- HDU 2178.猜数字【分析能力练习】【读题能力练习】【8月10】
猜数字 Problem Description A有1数m.B来猜.B每猜一次,A就说"太大"."太小"或"对了" . 问B猜n次能够猜到的 ...
- HDU 1172 猜数字 (模拟)
题目链接 Problem Description 猜数字游戏是gameboy最喜欢的游戏之一.游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么.每猜一个数,计算机都会告诉玩家猜 ...
- hdu 1172 猜数字
猜数字 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu - 1172 猜数字 (思维题)
http://acm.hdu.edu.cn/showproblem.php?pid=1172 这个题换一种想法,可以找出四位数中所有满足条件的数看是否只有一个. #include <iostre ...
- hdu 5059 判断数字表示方式以及范围合法(int型之内)
题意: 给你一个串和两个整数a,b,问你这个串表示的数字是否合法,并且在a,b之间, 和法的要求是无论是正数还是负数都没有前导0,并且注意 -0 是不合法的. 思路: 写了将近 ...
随机推荐
- STM32各个文件介绍、uCOSII文件介绍
(1)core_cm3.c , core_cm.h:获取设置CM3内核,配置一些内核寄存器,用到CM3核的都需要: (2)stm32f10x.h 和 system_stm32f10x.c , syst ...
- Python3基础 if elif 示例 判断一个数在哪个区间内
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Tempter of the Bone(dfs+奇偶剪枝)题解
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- Leetcode ——Lowest Common Ancestor of a Binary Tree
Question Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. ...
- Spring编译AOP项目报错
警告: Exception encountered during context initialization - cancelling refresh attempt: org.springfram ...
- 【TCP/IP详解 卷一:协议】TCP定时器 小结
前言 在有关TCP的章节中,介绍了四种定时器,它们体现了TCP的可靠性,其中最重要的 就是重传定时器了,剩下的定时器都是为了解决TCP的理解上的一些问题而设置的. 四种定时器: 2MSL定时器,出现在 ...
- BZOJ 1005: [HNOI2008]明明的烦恼(prufer数列)
http://www.lydsy.com/JudgeOnline/problem.php?id=1005 题意: Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标 ...
- c++ 判断两个容器是否相等(equal)
#include <iostream> // cout #include <algorithm> // equal #include <vector> // vec ...
- PROC怎么遇到错误全局rollback---SQLServer 异常的处理
ALTER PROCEDURE [dbo].[PROC_SMSACTIVE_UPDATE] AS BEGIN SET XACT_ABORT ON
- django查询操作
查询操作是Django的ORM框架中最重要的内容之一.我们建立模型.保存数据为的就是在需要的时候可以查询得到数据.Django自动为所有的模型提供了一套完善.方便.高效的API,一些重要的,我们要背下 ...