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 是不合法的. 思路: 写了将近 ...
随机推荐
- 20145225唐振遠《网络对抗》Exp5 MSF基础应用
基础问题回答 用自己的话解释什么是exploit,payload,encode? exploit就相当于是载具,将真正要负责攻击的代码传送到靶机中,我觉得老师上课举的火箭和卫星的例子非常形象,火箭只是 ...
- WIFI模块对比介绍
一.ESP8266(官网 https://espressif.com/)1 简介 乐鑫智能互联平台——ESCP 拥有高性能无线SOC,给移动平台设计师带来福音,它 以最低成本提供最大实用性,为WiFi ...
- JS中的按位非(~)的使用技巧
按位非 按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码 现在让我来看几个例子 例子1 console.log(4); console.log(~4); console.log( ...
- Duilib 实现右下角弹出像QQ新闻窗口,3秒后窗口透明度渐变最后关闭,若在渐变过程中鼠标放到窗口上,窗口恢复最初状态(二)
效果: 1.定义两个个定时器ID #define ID_TIMER_DISPLAY_DELAY 30 #define ID_TIMER_DISPLAY_CLOSE 40 2.添加一个成员函数和成员变量 ...
- Python3基础 父,子类普通方法重名 子类方法覆盖父类方法
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- linux下获取本机的获取内网和外网地址
1.获取内网地址(私有地址) ifconfig -a 2.获取外网地址(公网地址) curl members.3322.org/dyndns/getip
- fread
快速读入? 不知道 反正只是贴过来的 以后或许会用到? #define FI(n) FastIO::read(n) namespace FastIO { << ; ]; int bi = ...
- C#学习笔记(九):函数、代码查询和调试
代码查询和调试 代码查询 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...
- js自动小轮播
使用定时器,换个图片地址. 从1到5换,如果大于5了再跳到1,点击停止时关闭定时器. <!-- Author: XiaoWen Create a file: 2016-12-08 13:19:2 ...
- c++ 指定长度容器元素的拷贝(copy_n)
#include <iostream> // cout #include <algorithm> // copy #include <vector> ...