首页 > 其他分享 >4.4队内测

4.4队内测

时间:2024-04-07 13:11:34浏览次数:15  
标签:4.4 int mid dfs long ans 队内 size

#include<bits/stdc++.h>
using namespace std;
long long p[2000], sz, Ans, n, k;
long long q[10000];//储存生成的index数 
long long fac[15];//阶乘 
int size;
void dfs(int k,long long s){//预处理所有的的index数
    q[++size] = s;
    if(k == 11){
        return;
    } 
    dfs(k + 1, s * 10 + 4);
    dfs(k + 1, s * 10 + 7);
} 
void init(){//同上
    dfs(1,0); 
    sort(q + 1, q + size + 1);
} 
bool check(long long n) {//判断n是否为index数
    stringstream ss;//字符串流 
    string s;
    ss << n;
    ss >> s;
    bool f = 1;
    for(int i = 0; i < s.size(); i++) 
        if(s[i]!='4' && s[i]!='7'){
            f = 0; break;
        }
    return f;
} 
int main(){
    fac[0] = 1;
    for(int i = 1; i <= 12; i ++) fac[i] = i * fac[i - 1];//预处理 计算阶乘
    scanf("%lld%lld", &n ,&k);
    k--; //注意 队内测时这挂分了QAQ
    long long last = 1;
    init();
    for (int i = 1; i <= size; i++)
        if(q[i] < max(1ll, n - 13)&& check(q[i]))Ans++;//统计 n-13位前index数 
        
        for(int i = max(1ll,n-13); i < n; i++){
            long long tmp = fac[n-i];
            long long l = 0, r = n-i, mid, ans = 0;
            while(l <= r){//二分 
                int mid = (l + r) >> 1;
                if(mid * tmp > k) r = mid - 1;
                else ans = mid, l = mid + 1;
            }
        k -= ans * tmp;
        last += ans;
        ans ++;
        for(int j = 1; j <= sz; j++)
            if (p[j]<= ans)ans ++;
        p[++sz] = ans;
        sort(p + 1, p + 1+ sz);
        if(check(i)&&check(max(0ll, n - 14)+ans)) Ans++;
    }
    long long ans = 1;
    for (int j = 1; j <= sz; j++)
    if(p[j]<=ans) ans ++;
    if(check(n) && check(max(0ll, n-14)+ans))Ans ++;
            
    if(k > 0) puts("-1");
    else printf("%lld",Ans);    
    return 0; 
} 

 

标签:4.4,int,mid,dfs,long,ans,队内,size
From: https://www.cnblogs.com/nameko/p/18118850

相关文章

  • 2024清明节北斗课堂总结(4.4---4.6)
    背景通过学校老师的指引,我在清明节仅仅3天的假期内,上了长达18个小时的课程。课程虽然有一点点的累,但还是学到真本事的。Day1第一天,介绍是说上数据结构。本来我是认为会先将想栈、队列、链表等简单并可以用STL的数据结构,但一上来,就讲了树。另附:给我们讲课的是mrsrz。树的......
  • 2024.4.6 组合数学补题
    CF128CGameswithRectangle个人认为突破点是“严格包含”,一开始没注意严格不知道怎么处理。严格的话就是横竖分别在若干条边中,分别选出2k条边。横竖互不影响可以乘法原理,只考虑一个方向即可。#include<iostream>#include<cstdio>#include<algorithm>#definemaxn10000......
  • 2024.4.6练习笔记
    浙江理工大学2024年程序设计竞赛(同步赛)Fleetcode题目要求:求出一个序列中对于每个位置\(i\),以\(i\)为起点第一个\(\text{leetcode}\)子序列的终止位置。需要注意的是不要求子序列连续。不存在则答案为零。容易想到双指针,但是会TLE,考虑一些优化。扫描序列,字母是属于......
  • 24.4.5C语言学习笔记|访问空间地址【之前一直迷惑的问题】
    1、如何访问一个空间?有名访问无名访问指针的大小跟你的编译器是x64系统还是x86系统有关,%p,打印地址(十六进制)C语言如何用地址来描述一个空间?C语言如何识别变量的属性?定位,先右看,再左看数组:有多少个?每一个怎么存的?高级变形第二个:定位---a5【一个指针,地址,门牌号】怎么访......
  • 24.4.6 题解
    4.6模拟赛T1困难的图论题意:找出所有在且仅在1个简单环中的边,输出编号的异或和。一个错误的想法:找边双连通分量,看边数是否等于点数反例:正解是点双所以我在想,为什么是点双,不是边双呢?什么时候找点双,什么时候找边双呢?T2中等的字符串已知\(m\)个关键词\(s_i\),每出现......
  • 2024.4.6 - 4.12
    SatJOI2023Final宣传2\(n\)个人,每个人有住所位置\(X_i\)与影响力\(E_i\),一个人\(i\)拿到书后会号召另一个人\(j\)买书仅当\(|X-i-X_j|\leqE_i-E_j\),你最少送多少个人书才能使得所有人都会有书(送的或者被号召买书)。\(n\leq5\times10^5\)。拆一下绝对值,得:\[......
  • 2024.4.5 RMQ补题
    P2048[NOI2010]超级钢琴前缀和处理连续子段的和弦,然后rmq求最大值运用堆存储最优答案每次取出堆头统计一次后,除掉统计点再分成两段加入即可,共k次#include<bits/stdc++.h>#definemaxn500010#defineINF0x3f3f3f3f#defineintlonglongusingnamespacestd;int......
  • 1.5 警惕和揭秘伪创新(1)《软件方法》2024.4更新
    DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集1.5警惕和揭秘伪创新初中数学里要学习全等三角形、相似三角形、SSS、SAS……,到了高中以后学了正弦定理、余弦定理等解三角形的知识……就不会再回去用初中的方法解题了。但是,不是所......
  • 2024.4 做题记录
    299.CF1534ELostArray难崩。题意转化为每次翻转\(m\)个\(01\)序列的元素,要把全\(0\)翻成全\(1\)。不想分讨。考虑直接最短路求最小步数,转移就枚举选多少个原本已经有的数。交互就记录方案就行了。300.P9537[YsOI2023]CF1764B很棒的题。考察终态,可以发现最后输......
  • 2024.4 第一周做题记录
    \(2024.4.2\)CF1336DYuiandMahjongSet题意:初始有一个值域在\([1,n]\)的多重整数集\(S\),且每个元素重复次数最多为\(n\),定义\(\operatorname{triple}(S)\)表示\(S\)中相同无序三元组数量,\(\operatorname{straight}(S)\)表示\(S\)中连续整数的无序三元组数量,告诉......