zoukankan      html  css  js  c++  java
  • 【8.5 测试】辉夜的序列

                            辉夜的序列
    【题目背景】
    又是某高中学生会无聊的一天,辉夜同学由于实在太闲,在摆弄她的 n 颗巧克力
    【问题描述】
    突然,由于某种神秘力量,她的巧克力形成了一个神秘序列。她看到这个神秘
    的序列,想到了一条水题。由于真的太水了,她不好意思告诉别人。但她看着你好奇
    的目光,偷偷告诉了你题目。
    每个巧克力都有一个可爱值 x ,x 为小于 n 的正整数,且互不相同。问最少的
    操作数使巧可力的可爱值从左到右,由小到大递增。
    对于每个操作,你可以取出一部分巧克力(可以不连续的子序列),按原有的顺序放到
    所有巧克力的最左边。
    然而出题人想起了 GDOI 拼题的优秀传统(想起了被 网络流拼SAM作为签到题 支配的恐
    惧),想要考下快速幂。设答案为 y ,输出 y^998244355 ( y 的 998244355 次方)
    对 998244353 取模
    【输入格式】
    第一行,一个整数 T,T<=5,表示有T组数据。
    对于每组数据
    第一行 1 个整数 n。
    第二行 n 个整数,表示每个巧克力的可爱值,它们构成一个排列。
    【输出格式】
    输出一行 1 个整数表示答案。
    【样例输入】
    2
    5
    5 4 3 2 1
    4
    1 2 3 4
    【样例输出】
    27
    0
    对于第一组
    第一次取 4 2,放到左边,变成 4 2 5 3 1
    第二次取 2 3,放到左边,变成 2 3 4 5 1
    第三次取 1, 放到左边,变成 1 2 3 4 5
    【数据范围】
    序号 n的最大值
    1 5
    2 10
    3 20
    4 50
    5 100
    6 1000
    7 1000
    8 2000
    9 100000
    10 200000
    对于第3,6个测试点,满足 x 单调递减

    题解:     玄学算法石锤了!who能想到二进制。。。。

               每个数取二进制再-1。从低位向高位不断“找”。

               只要这一位是0就把提到最前面。

               然后如果两个数有序,后一数字的二进制和前面数字一样。

              (可能还是不懂,举个例子哈,图片有点透明,但还是能看清的)

               ps:原文的快速幂其实就是这个数立方…太玄学! 

      

    附上更玄学的代码

    #include <bits/stdc++.h>
    
    using namespace std;
    #define mmst(a, b) memset(a, b, sizeof(a))
    #define mmcp(a, b) memcpy(a, b, sizeof(b))
    
    typedef long long LL;
    
    const int N=300300;
    
    int T,n,num[N],ans,tu;
    
    int main()
    {
        freopen("kaguya1.in", "r", stdin);
        freopen("kaguya1.ans", "w", stdout);
        
        cin>>T;
        while(T--)
        {
        tu=ans=0;
        
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            int x;
            scanf("%d",&x);
            num[x]=i;
        }
        
        for(int i=2;i<=n;i++)
        if(num[i]<num[i-1])
        ans++;
        
        while(ans)
        {
            ans/=2;
            tu++;
        }
        
        cout<<tu*tu*tu<<endl;
        
        }
        
        return 0;
    }
  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11307806.html
Copyright © 2011-2022 走看看