2018 计蒜之道 初赛 第四场题解 未完结

A.题目链接
Analysis:
对于任何一个如题的浮点数,唯有我当前识别的数为4才会受后一位影响
~~~当然你要注意|Y|表示长度超1000位,我会告诉你我第一份妄想FB的代码是直接 > 444 的嘛 )辣鸡出题人
Code

#include <iostream>
#include <cstdio>
#include <cmath>;
using namespace std;

template <class T>
inline void scan_d(T &ret) {
    char c; ret=0;
    int t ;
    while((c=getchar())<'0'||c>'9');
    while(c>='0'&&c<='9') ret=ret*10+(c-'0'),c=getchar();
    c=getchar();
    while(c>='0'&&c<='9'){
        t = c - '0';
        if(  t == 4 ) c=getchar();
        else {
            if( t > 4 ) ret++;
            cin.ignore(1001,'\n');
            break;
        }
    }
}
template <class T>
inline void out(T x) {
    if(x>9) out(x/10);
    putchar(x%10+'0');
}

int main()
{
    int T;
    cin >> T;
    long long x;
    while (T--) {
        scan_d(x);
        out(x);
        cout<<endl;
    }
    return 0;
}

B.题目链接

Analysis:
这道题暴力即可,使用全排列匹配过去就好了
这里讲解一下我的做法,由于题目要求的是集合,那么也就是无序的,第一反应是排序使之升序以匹配(桶排序正好),然后索性就把值加起来呗-。-二进制来验证值是否相同就来了///

Bin_Sort原理

如图,我当前得到的序列是{3,5},那么sum = 00010100。我在全排列中找连续的两位获取他们的二进制和,异或 或者 或运算 就好

Code

bool match(const string &s, const string &templet) {
    int bit_s = 0, bit_templet = 0;
    int size = s.length();
    for (int i = 0; i < size; ++i) 
        bit_s |= (1 << (s[i]-'0' - 1)), bit_templet |= (1 << (templet[i]-'0' - 1));

    if (!(bit_s ^ bit_templet))  return true;
    for (int i = size; i < templet.size(); ++i) {
        bit_templet ^= (1 << (templet[i - size] -'0' - 1)), bit_templet |= (1 << (templet[i] -'0' - 1));
        if (!(bit_s ^ bit_templet)) return true;
    }
    return false;
}   

作为蒟蒻,我直接看的input然后快写完了,才回过头看见是set.快夸奖我~所以你们不要像我用map存储string,直接 vector< int,vec<int> > (最好写个空格~)或者 int[][] 皆可
分享下我的提交:
1. 有序的判断- 40 分
2. 有序的判断改成双向匹配 - 90分
3. 位运算 - AC


C.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值