1. 程式人生 > >洛谷11月月賽題解(A-C)

洛谷11月月賽題解(A-C)

心路歷程

辣雞T3卡我1.5h題意,要不是最後nlh跟我解釋了一下大樣例估計這次是真涼透了。。

A P4994 終於結束的起點

打出暴力來發現跑的過最大資料??

保險起見還是去oeis了一波,然後被告知第一個滿足條件的位置不會超過\(2n +2\)

贏了

#include<bits/stdc++.h>
#define Pair pair<int, int>
#define MP make_pair 
#define fi first
#define se second 
using namespace std;
const int MAXN = 1e7 + 10;
inline int read() {
    char c = getchar(); int x = 0, f = 1;
    while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int f[MAXN] = {0, 1};
int main() {
    int M = read();
    for(int i = 2; i; i++) {
        f[i] = (f[i - 1] + f[i - 2]) % M;
        if(f[i - 1] == 0 && f[i] == 1) {printf("%d\n", i - 1); break;}
    }
    return 0;
}

B P4995 跳跳!

為啥\(n \leqslant 300\)啊。。出題人這麼放煙霧彈真的好麼。。。

直接排序之後每次在沒跳過的最大的和沒跳過的最小的之間跳

開始的時候跳的最大的

#include<bits/stdc++.h>
#define Pair pair<int, int>
#define MP make_pair 
#define fi first
#define se second 
#define LL long long 
using namespace std;
const int MAXN = 1e6 + 10;
inline int read() {
    char c = getchar(); int x = 0, f = 1;
    while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int N; 
LL a[MAXN];
int main() {
    N = read();
    for(int i = 1; i <= N; i++) a[i] = read();
    sort(a + 1, a + N + 1, greater<int>());
    LL ans = a[1] * a[1], l = 1, r = N, opt = 0;
    for(int i = 1; i <= N - 1; i++, opt ^= 1) {
        ans += abs((a[l] - a[r]) * (a[l] - a[r]));
        if(!opt) l++;
        else r--;
    }
    cout << ans;
    return 0;
}

B P4996 咕咕咕

看不懂題其實也不能完全怪出題人吧。。還是自己太菜了。。

直接爆搜+記憶化就能騙到\(40\)分(莫名奇妙wa掉兩個點)

交上去的時候已經\(11:47\)了。。吃飯的時候發現可以把\(1\)的個數相同的數一起算,他們的係數都是一樣的。

然後就做完了。。

時間複雜度:\(O(2^n)\)

好像可以直接用組合數算係數?

#include<cstdio>
#include<map>
#include<iostream>
#define Pair pair<int, int>
#define MP make_pair 
#define fi first
#define se second 
#define LL long long  
using namespace std;
const int MAXN = 3e6 + 10, mod = 998244353;
inline int read() {
    char c = getchar(); int x = 0, f = 1;
    while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int N, M, Lim, ans, ou[MAXN], in[MAXN];
int mp[1 << 22];
void add(int &x, int y) {
    if(x + y < 0) x = x + y;
    else x = (x + y >= mod ? x + y - mod : x + y);
}
int mul(int x, int y) {
    return 1ll * x * y % mod;
}
int trans(string x) {
    int ou = 0;
    for(int k = 0; k < N; k++) if(x[k] == '1') ou |= 1 << k;
    return ou;
}
int g(int x) {
    return __builtin_popcount(x);
}
int dfs(int sta) {
    if(ou[g(sta)]) return ou[g(sta)];
    for(int i = sta + 1; i <= Lim; i++) 
        if((i & sta) == sta) add(ou[g(sta)], dfs(i));
    return ou[g(sta)];
}
int dfs2(int sta) {
    if(in[g(sta)]) return in[g(sta)];
    for(int i = 0; i < sta; i++) 
        if((i & sta) == i) add(in[g(sta)], dfs2(i));
    return in[g(sta)];
}
int main() {
    N = read(); M = read(); Lim = (1 << N) - 1;
    for(int i = 1; i <= M; i++) {
        string s; int val;
        cin >> s; val = read() % mod; 
        mp[trans(s)] = val;
    }
    in[0] = 1; ou[g(Lim)] = 1;
    dfs(0); dfs2(Lim); 
    for(int i = 0; i <= Lim; i++) add(ans, mul(mp[i], mul(ou[g(i)], in[g(i)])));
    cout << ans;
}

D

沒時間寫暴力了。

puts("-1 -1")騙了10分。。

相關推薦

11月月題解(A-C)

心路歷程 辣雞T3卡我1.5h題意,要不是最後nlh跟我解釋了一下大樣例估計這次是真涼透了。。 A P4994 終於結束的起點 打出暴力來發現跑的過最大資料?? 保險起見還是去oeis了一波,然後被告知第一個滿足條件的位置不會超過\(2n +2\) 贏了 #include<bits/stdc++.h&g

「P4996」「11月月」 咕咕咕(數論

題目描述 小 F 是一個能鴿善鵡的同學,他經常把事情拖到最後一天才去做,導致他的某些日子總是非常匆忙。 比如,時間回溯到了 2018 年 11 月 3 日。小 F 望著自己的任務清單: 看 iG 奪冠; 補月賽題的鍋。 小 F 雖然經常咕咕咕,但他完成任務也是很厲害的,他一次性可以完成剩

[11月月]

比賽連結 T1 思路 按照斐波那契的式子到著往前推就行,f[i]=f[i+2] - f[i+1],當找到某個值使得f[i] = 0,f[i+1] = 1的時候就停止。 程式碼 //https://www.luogu.org/problemnew/show/P4994 #include<cstd

「P4994」「11月月」 終於結束的起點(枚舉

一次 分享 ted main orange 多少 質因子 生涯 nbsp 題目背景 終於結束的起點終於寫下句點終於我們告別終於我們又回到原點…… 一個個 OIer 的競賽生涯總是從一場 NOIp 開始,大多也在一場 NOIp 中結

11月月

https://www.luogu.org/contestnew/show/12006 我是比賽完後在去寫的 這是我第一次打洛谷月賽,之前一次是比賽完才去看而且寫了第一題就沒寫後面的了 284分,太水了,rank85左右 第一題第二題AC了,第三題寫了3^n的演算法,知道會超時,也知道滿分做法應該是隻

11月月T3】【P4996】咕咕咕(組合數)

遲到的題解 昨天亂翻的時候感覺這道題挺有意思的 一眼看過去狀態壓縮亂搜 轉移方程大概是 設f[i]表示從0轉移到i的遺憾值之和 f[i]=sigma(f[j])+val[i]*dis[i] dis[i]=sigma(dis[j]) 其中j是i的子集,dis[i]表示從0轉移到i的方案數之和 妙啊有70分了 /

月月題解報告

現在 圖片 數字 div 但是 格式 image 投票 cin   昨天就是洛谷三月月賽,小編考的並不好,才31分,隔壁大佬50分,於是小編決定改一改題,先看第一題:                   P5238 整數校驗器 題目描述 有些時候需要解決這樣一類

題解6月月 —— 「數學」約數個數和

分解 pri clas left pac 這樣的 DC 兩個 探測   看德國戰墨西哥去了結果發現比賽只剩下30分鐘……當然之後又思考這題挺久也還是不會做。看了一下題解,覺得這個做法挺厲害的,在這裏記錄一下:   原式實際上就是:(\(K +=

11月月部分題解 By cellur925

聽說是你谷史上最水月賽?我不聽我最菜 T1:終於結束的起點 月天歌名好評 給你一個模數 \(M\),請你求出最小的 \(n > 0\),使得\(fib(n)\) \(mod\) \(m=0\),\(fib(n+1)\) \(mod\) \(m=1\)。 數學題,開始還想打表驗證下,但是我不會告訴你

10月月Round.1 A.絲綢之路

#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #inclu

月月

bfs scanf col sca 貪心 排序 ont pre open A題 分析:直接貪心即可,註意要long long 1 #include "iostream" 2 #include "cstdio" 3 #include "cstring" 4 #in

9月月T1——預生成密碼

-a cnblogs turn code -o style su- col blog 其實這題只是一道比較簡單的數學題。 輸入給出了a,b,c三個數的與或和 由於要a盡可能小,a相同則b盡可能小,b相同則c盡可能小 所以a最小一定是and,此時若要b盡可能小,c就要盡可能大

10月月R1·普及組

ack com iostream read n) none 水題 cin 初始 SAC E#1 - 一道不可做題 Jelly 這題是大水題,隨便AC。 就是要註意一點:初始溫度與熔點的大小關系。 就是因為這個。。wa了。。 #include<iostream>

【LGR-047】5月月

cti stat strong 半徑 要求 一起 lin 算法 pac 這次我期待了很久的Luogu賽制崩掉了 傳說中的Luogu神機就這樣被卡爆了 然後我過了20min才登上Luogu的網站,30min後才看到題目 然後交T1TM的不給我測!!!然後又叫了一次機子就炸了,

5月月】玩遊戲(NTT,生成函數)

wap class char gist 一個 我們 max 卷積 include 【洛谷5月月賽】玩遊戲(NTT,生成函數) 題面 Luogu 題解 看一下要求的是什麽東西 \((a_x+b_y)^i\)的期望。期望顯然是所有答案和的平均數。 所以求出所有的答案就在乘一個逆

5月月T30212 玩遊戲 【分治NTT + 多項式求ln】

LG AI getchar make DG mit pla con 形式 題目鏈接 洛谷T30212 題解 式子很容易推出來,二項式定理展開後對於\(k\)的答案即可化簡為如下: \[k!(\sum\limits_{i = 0}^{k} \frac{\sum\limits_

【LGR-049】7月月

while size printf class jump 二分 ++ 一個 sin Preface Luogu八月月賽都結束了我才來補七月月賽 這次月賽還是很狗的,在紹一的晚上恰逢刮臺風,然後直接打到一半斷網了 結果都沒有交上去GG 感覺這次難度適中,解法也比較清新自然吧,

月月T1】簽到題(bsgs)(快速乘)

code 是我 好的 取模 lin pri sca ast for 說好的簽到題呢qwq。。。。怎麽我簽到題都不會啊qwq 之後看了bsgs才發現貌似不是那麽那麽難fake!!什麽東西。。。 先貼上部分分做法(也就是枚舉1的個數,然後每一步都進行取模(這和最後取模結果一樣,

月月

如果 打表 奇數 new 回文 十月 http clas 維護 (比賽鏈接)[https://www.luogu.org/contestnew/show/11084] T1 50分 : 暴力 100分· : 臨時數組記錄位置 T2 先看s = 0時 對於一個合理串 把它每一

月月2T1瀏覽器P4932

傳送門 https://www.luogu.org/problemnew/show/P4932 題面 題目描述 __stdcall給了你n個點,第i個點有權值x[i],對於兩個點u和v,如果x[u] xor x[v]的結果在二進位制表示下有奇數個1,那麼在u和v之間連線一個Edg