• 个人简介

    该用户太懒,这里啥也没写 (´・ω・`)

    提示:

    继续往下看,会有更好看的东东!

    image

    打表过样例,暴力出奇迹 要是想把分数偷,贪心打表加暴搜 快读快写火车头,马上AC不用愁!

    分不在低,一百就行;学不在深,考试则灵;斯是教室,惟吾开心……有书声之悦耳,有复习 之开心。杨奕辰(本人)云:“吾只爱数学考试!!!”

    这个小伙想败家,

    钱都不知怎么花,

    小伙每天特别烦,

    钱多根本花不完。

    小伙本是单身狗,

    房子票子都没有。

    小伙丝毫不在意,

    还和寡妇去约会。

    这天小伙刚睡醒,

    约了寡妇看电影。

    打开手机去订票,

    一看顿时吓一跳。

    现在金钱贬了值,

    两毛就能开奔驰。

    想住豪华大别墅,

    一块就能当首付。 (未完待续)

    image

    妙记珠穆朗玛峰

    地上,了。 在地上,有马蜂

    春敏

    春天固然美丽 ,但是花粉过敏。 喷嚏阿嚏阿嚏 ,鼻涕流个不停。

    1+1=?

    A.2 B.10 C.11 D.不知道

    • 答案:↓
    • 啊啊啊
    • 不不不
    • 踩踩踩
    • 顶顶顶
    • 呃呃呃
    • 烦烦烦
    • 嘎嘎嘎
    • 哈哈哈
    • 哎哎哎
    • 急急急
    • 酷酷酷
    • 啦啦啦
    • 买买买
    • 你你你
    • 哦哦哦
    • 啪啪啪
    • 钱钱钱
    • 日日日
    • 杀杀杀
    • 她她她
    • 有有有
    • 喂喂喂
    • 嗡嗡嗡
    • 嘻嘻嘻
    • 也一样
    • 在这种
    • 啊啊啊
    • 不不不
    • 踩踩踩
    • 顶顶顶
    • 呃呃呃
    • 烦烦烦
    • 嘎嘎嘎
    • 哈哈哈
    • 哎哎哎
    • 急急急
    • 酷酷酷
    • 啦啦啦
    • 买买买
    • 你你你
    • 哦哦哦
    • 啪啪啪
    • 钱钱钱
    • 日日日
    • 杀杀杀
    • 她她她
    • 有有有
    • 喂喂喂
    • 嗡嗡嗡
    • 嘻嘻嘻
    • 也一样
    • 在这种
    • 啊啊啊
    • 不不不
    • 踩踩踩
    • 顶顶顶
    • 呃呃呃
    • 烦烦烦
    • 嘎嘎嘎
    • 哈哈哈
    • 哎哎哎
    • 急急急
    • 酷酷酷
    • 啦啦啦
    • 买买买
    • 你你你
    • 哦哦哦
    • 啪啪啪
    • 钱钱钱
    • 日日日
    • 杀杀杀
    • 她她她
    • 有有有
    • 喂喂喂
    • 嗡嗡嗡
    • 嘻嘻嘻
    • 也一样
    • 在这种
    • 啊啊啊
    • 不不不
    • 踩踩踩
    • 顶顶顶
    • 呃呃呃
    • 烦烦烦
    • 嘎嘎嘎
    • 哈哈哈
    • 哎哎哎
    • 急急急
    • 酷酷酷
    • 啦啦啦
    • 买买买
    • 你你你
    • 哦哦哦
    • 啪啪啪
    • 钱钱钱
    • 日日日
    • 杀杀杀
    • 她她她
    • 有有有
    • 喂喂喂
    • 嗡嗡嗡
    • 嘻嘻嘻
    • 也一样
    • 在这种

    智商:A.10,B:5,C:7,D:无法描述

    0⁰ = ?

    0⁰ = 0¹ / 0¹ = 0 / 0 = ? 0ⁿ = 0ⁱ⁺ⁿ / 0ⁱ =0 / 0 = ?

    image

    image

    image

    编程实用模版(更新中...)

    1.最长非连续(上升/不上升/下降/不下降)子序列求解(时间复杂度最佳)**1.最长非连续(上升/不上升/下降/不下降)**子序列求解(时间复杂度最佳)

    // O(nlogn) 复杂度求解
    // 例:最长上升子序列 
    
    #include <bits/stdc++.h>
    
    using namespace std;
    const int N = 1000005;
    int n, ans, a[N], d[N], f[N];
    
    int max_len(int x) //求解d数组中第一个(大于/大于等于/小于/小于等于)x的数下标
    {
        int l = 1, r = n, mid, ans = n + 1;
    
        while (l <= r)
        {
            mid = (l + r) / 2;
        
            // if (d[mid] > x) //最长不下降子序列
            // if (d[mid] <= x) //最长下降子序列
            // if (d[mid] < x) //最长不上升子序列
            // if (d[mid] >= x) //最长上升子序列
            if (d[mid] >= x)
    		{
                ans = mid;
                r = mid - 1;
            }
            else
                l = mid + 1;
        }
        return ans;
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
      
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i];
            d[i] = 1000000; //最长(上升/不下降)子序列
            //d[i] = 0; //最长(下降/不上升)子序列
        }
      
        for (int i = 1; i <= n; i++)
        {
            int now = max_len(a[i]); //求解下标
            f[i] = now;
            d[now] = a[i];
            ans = max(f[i], ans); //更新ans
        }
      
        cout << ans;
      
        return 0;
    }
    

    2.最长山峰子序列/峡谷子序列(非连续)(第一个的变体)**2.最长山峰子序列/**峡谷子序列(非连续)(第一个的变体)

    // O(n*n)
    // 例:山峰子序列 
    
    #include <bits/stdc++.h>
    
    using namespace std;
    int n, ans, a[105], f[105], g[105];
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
    
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
      
        for (int i = 1; i <= n; i++)
        {
            f[i] = 1;
            for (int j = 1; j < i; j++)
            {
            	// if (a[j] < a[i]) // 山峰子序列(先上升后下降最长子序列) 
            	// if (a[j] > a[i]) // 峡谷子序列(先下降后上升最长子序列) 
    		    if (a[j] < a[i])
                    f[i] = max(f[i], f[j] + 1);
            }
        }
        for (int i = n; i >= 1; i--)
        {
            g[i] = 1;
            for (int j = n; j > i; j--)
            {
        	    // if (a[j] < a[i]) // 山峰子序列(先上升后下降最长子序列) 
            	// if (a[j] > a[i]) // 峡谷子序列(先下降后上升最长子序列) 
    		    if (a[j] < a[i])
                    g[i] = max(g[i], g[j] + 1);
        	}
    	}
        for (int i = 1; i <= n; i++)
            ans = max(ans, f[i] + g[i] - 1);
    
        cout << ans << endl;
      
        return 0;
    }
    

    3.归并排序**3.**归并排序

    逆序对定义:对于给定的一段正整数序列,如果排在前面的一个数字大于后面的数字,那么这两个数字就组成了一个逆序对。
    //归并排序 O(nlogn)
    
    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 5005;
    int n, a[N], t[N];
    
    void Mergesort(int l, int r)
    {
        //1.只剩一个元素时返回
        if (l == r)
            return ;
        int mid = (l + r) / 2;
      
        //2.平分出两半进行分别处理
        Mergesort(l, mid);
        Mergesort(mid + 1, r);
      
        //3.合并 a[l ~ mid] 和 a[mid + 1 ~ r] 的两个有序数组
        int pl = l;
        int pr = mid + 1;
        int pt = l;
        while (pl <= mid && pr <= r)
        {
            // 降序 if(a[pl] >= a[pr])
            if (a[pl] <= a[pr]) {
                t[pt++] = a[pl++];
            } else {
                t[pt++] = a[pr++];
        		//逆序对 ans += mid - pl + 1;
    		}
    	}
        //4.处理剩余的 pl 或 pr 部分
        while (pl <= mid)
            t[pt++] = a[pl++];
        while (pr <= r)
            t[pt++] = a[pr++];
      
        //5.将 t 数组重新覆盖 a 数组
        for (int i = l; i <= r; i++)
            a[i] = t[i];
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
      
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        Mergesort(1, n);
      
        for (int i = 1; i <= n; i++)
            cout << a[i] << ' ';
      
        return 0;
    }
    

    4.01背包+完全背包+分组背包𝑑𝑝(动态规划)4.01背包**+完全背包+分组背包dp(动态规划)**

    //优化空间复杂度(一维数组)
    
    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e5 + 5;
    int n, m, v[101], w[101], f[N];
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
      
        cin >> m >> n;
        for (int i = 1; i <= n; i++)
            cin >> v[i] >> w[i];
      
        // 填满背包的做法补充:
    	// memset(f, 0xcf, sizeof(f));
        // f[0] = 0; 
      
      
        // f[j]:在前 i 件物品中,选出总体积不超过 j 的物品,能够获得的最大价值
        // 由于 f[j] 需要从 f[j - v[i]] 转移而来,所以遍历 j 时应从大到小遍历
        for (int i = 1; i <= n; i++) {
            for (int j = m; j >= v[i]; j--) {
                f[j] = max(f[j], f[j - v[i]] + w[i]);
            }
        }
        cout << f[m];
        // cout << max(f[m], 0); 
      
        return 0;
    }
    
    //完全背包(空间压缩版)
    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e5 + 5; //范围任意
    int t, k, v[N], w[N], f[N];
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
      
        //输入
        cin >> t >> k;
        for (int i = 1; i <= k; i++)
            cin >> v[i] >> w[i];
      
        for (int i = 1; i <= k; i++)
            for (int j = v[i]; j <= t; j++) //从前往后便利
            //保证在使用f[j]时已经确定i - 1个物品的状态
                f[j] = max(f[j], f[j - v[i]] + w[i]);
        cout << f[t] << endl;
      
        return 0;
    }
    
    //分组背包dp(空间压缩版)
    
    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e3 + 5;
    int n, m, s[N], f[N]; //f[j]表示前i个物品花费j元的最大价值
    int v[N][N], w[N][N]; //如果数组过大可考虑vector存储如下
    vector v[N], w[N]; //读入用v[].push_back()
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
      
        //输入
        cin >> n >> m;
        for (int i = 1; i <= n; i++) {
            cin >> s[i];
            //有n组物品,每组有s[i]个物品
            for (int j = 1; j <= s[i]; j++)
                cin >> v[i][j] >> w[i][j];
        }
        for (int i = 1; i <= n; i++)
            for (int j = m; j >= 0; j--) //倒叙遍历确保f[j - v[i][j]]还没更新
                for (int k = 1; k <= s[i]; k++)
                    if (j >= v[i][k]) //饭钱不能比兜里的贵啊!
                        f[j] = max(f[j], f[j - v[i][k]] + w[i][k]);
        cout << f[m];
      
        return 0;
    }
    

    5.快速幂**5.**快速幂

    //快速幂 O(log2 n) 
    
    #include <bits/stdc++.h>
    #define ll long long
    
    using namespace std;
    
    ll b, p, k, ans = 1;
    ll b1, p1;
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
      
        //计算 b ^ p mod k 的结果
        cin >> b >> p >> k;
        b1 = b;
        p1 = p;
        while (p)
        {
            // 1.判断二进制情况下最后一位是否为 1
            if (p & 1)
            {
                // 2.判断为真时,计算乘积并取模
                ans *= b;
                ans %= k;
            }
            // 3.其他情况下累加 b 计算下一次的 1 并对其取模
            b *= b;
            b %= k;
        
            // 4.取出 p 的最后一位
            p >>= 1;
        }
      
        // 5.输出时 ans 别忘取模
        cout << ans % k;
      
        return 0;
    }
    

    6.最大字段和𝑑𝑝6.最大字段和dp

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 200005;
    int n, a[N], f[N];
    int ans = -10005;
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
      
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i];
            f[i] = max(a[i], a[i] + f[i - 1]);
            ans = max(ans, f[i]);
        }
      
        cout << ans;
      
        return 0;
    }
    

    7.快速排序**7.**快速排序

    //快速排序 quick sort
    //时间复杂度:O(nlogn) ~ O(n²)
    //稳定性:不稳定
    
    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e5 + 5;
    int n, a[N];
    
    void qsort(int l, int r)
    {
        int x = a[(l + r) / 2]; //设定基准数x
        int i = l, j = r;       //设定左右边界i,j
        while (i <= j)
        {
            //升序
            while (a[i] < x) i++;
            while (a[j] > x) j--;
        
            //降序
            //while (a[i] > x) i++;
            //while (a[j] < x) j--;
        
            if (i <= j) //如果还没有交叉
            {
                swap(a[i], a[j]); //交换两个数
                i++;
                j--;
            }
        }
        if (l < j) qsort(l, j); //左端是否到底
        if (i < r) qsort(i, r); //有段是否到底
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
      
        cin >> n;
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
        } qsort(1, n);
      
        for (int i = 1; i <= n; i++) {
            cout << a[i] << " ";
        }
        
        return 0;
    }
    

    8.快读快写**8.**快读快写

    //T 为输入输出数据类型
    
    inline T Read()  {
    	int sum = 0, fl = 1;
    	int ch = getchar();
    	for (; !isdigit(ch); ch = getchar())
    	if (ch == '-') fl = -1;
    	for (; isdigit(ch); ch = getchar()) sum = sum * 10 + ch - '0';
    	return sum * fl;
    }
    
    inline void Write(T x)  {
        static int sta[35];
        int top = 0;
        do {
            sta[top++] = x % 10, x /= 10;
        } while (x);
        while (top) putchar(sta[--top] + 48); // 48 是 '0'
    }
    

    image

    9.冒泡排序**9.**冒泡排序

    /**冒泡排序(加入了判断是否已经排序了的boolean变量) */
        public static void bubbleSort(int[] arr) {
            for(int end = arr.length-1; end > 0; end--){
                boolean isSort = true;
                for(int i = 0; i < end; i++){
                    if(arr[i] > arr[i+1]){
                        swap(arr,i,i+1);
                        isSort = false;
                    }
                }
                if(isSort)break;
            }
        }
    

    10.鸡尾酒排序**10.**鸡尾酒排序

    /**改进的冒泡排序(鸡尾酒排序)  就是把最大的数往后面冒泡的同时, 最小的数也往前面冒泡*/
        public static void cocktailSort(int[] arr) {
            int L = 0,R = arr.length-1;
            while(L < R) {
                for(int i = L; i < R; i++) if(arr[i] > arr[i+1]) swap(arr,i,i+1);
                R--;
                for(int i = R; i > L; i--) if(arr[i] < arr[i-1]) swap(arr,i,i-1);
                L++;
            }
        }
    

    11.选择排序**11.**选择排序

    //选择排序
        public static void selectSort(int[] arr){
            for(int i = 0; i < arr.length; i++) {
                int minIndex = i;/**记录后面的最小值的下标*/
                for (int j = i + 1; j < arr.length; j++) //注意从i+1开始
                    minIndex = arr[j] < arr[minIndex] ? j : minIndex;
                swap(arr,i,minIndex);
            }
        }
    

    image

    好玩

    《奇葩老师和小明》 老师问:什么叫摔伤?

    小明回:从楼上掉下来。

    老师问:什么叫幸运?

    小明回:楼下有个草堆。

    老师问:什么叫不幸?

    小明回:草堆上有个叉子。

    老师问:什么叫希望?

    小明回:没掉在叉子上。

    老师问:什么叫绝望?

    小明回:也没掉在草堆上。

    老师问:什么叫多亏了?

    小明回:掉在水里。

    老师问:什么叫完蛋?

    小明回:水里有鲨鱼。

    老师问:什么叫幸好?

    小明回:猎人在旁边一枪打中了鲨鱼。

    老师问:什么叫结束?

    小明回:猎人射的是散弹。

    老师:什么叫上天眷顾?

    小明:没射中你。

    老师:什么叫大难临头?

    小明:你不会游泳。

    老师:什么叫万幸?

    小明:你在浅水区。

    老师:什么叫天要亡我?

    小明:水里的海草缠住了脚。

    老师:什么叫必有后福?

    小明:海草一挣就断。

    第一阶段: 《信息学奥赛一本通》 《信息学分析讲义》

    第二阶段: 《教你怎么不生气》 《佛经》 《老子》 《沉默的愤怒》

    第三阶段: 《颈椎病康复指南》 《腰椎间盘突出日常护理》 《心脏病的预防与防治》 《高血压降压宝典》 《强迫症的自我恢复》 《精神病症状学》

    第四阶段: 《活着》

    第五阶段: 《复活》

    image

    image

    image

  • 通过的题目

  • 最近活动

    This person is lazy and didn't join any contests or homework.
  • 最近编写的题解

    This person is lazy and didn't write any solutions.

题目标签

客观题
1