由於不會正解,所以只打了暴力,最終得分:50pts
暴力模擬斐波那契數列的操作,加個高精就能過了,但是極其耗費碼力,所以說還是__int128
爽。
這一題真沒什麼好說的,noi 出這題就是想讓人打暴力的,考場上正常人誰寫這麼複雜的東西。
由於本題中 m 的大小如果硬乘再模很明顯就會爆掉longlong
,所以使用龜速乘法,用加法來代替乘法從而達到不爆longlong
的目的。
外加本題中的遞推關係十分明顯,就直接用矩陣快速冪求解,可以十分迅猛的得到答案。
關於乙個向量而言,我們只用維護乙個字首和就可以了,而且我們發現該題的模數是 2 和 3 ,所以在一開始的時候就取模再進行加的操作就可以得到答案了,然後 \(o(d)\) 地掃一遍每個維數的字首,然後掃一遍每個陣列就可以了,整體的時間複雜度是 \(o(nd^2)\) 的,足夠通過本題。
其實用不著。
只用維護兩個量,乙個是 0,乙個是 -1,由於 -1 在二進位制下的數都是 1,所以說操作就是和 0 是反著來的, 貪心的說,如果說能換成1就換,不能換就不換,然後把每一位都跑一遍,就行了。
本題的標號有一點大,所以用離散化來進行查詢,先把 1 的都連起來,然後跑 0 的查詢,用並查集完成以上操作。
code :
#include#include#includeusing namespace std;
const int n = 2e5 + 1;
int n,m;
int f[n];
inline void resetset(const int s)
int findset(const int x)
int a[n];
struct node
}s[n];
inline void input()
inline void work() else
} return void(puts("yes"));
}int main()
}
反正我是用這玩意混過去的,用字串 hash 來判重,列舉a的長度之後,用二分查詢來找到可能的b的可能,然後一起加起來就可以了。
有人說字串hash跑不過去,我還真跑過去了。
#includeusing namespace std;
const int n = 4e4 + 1;
const long long mod = 1e9 + 7;
long long has[n],mo[n],u[n],v[n],ans;
int n;
char ch[n];
inline long long h(int l,int r)
inline void work()
hd = i - pos + 1;
l = 1,r = l,pos = 0;
while(l <= r)
tl = i + pos - 1;
hd = max(hd+l-1,i);
tl = min(tl,i+l-1);
if(hd <= tl)
} }ans = 0;
for(int i = 1; i <= n; i++) u[i] += u[i-1],v[i] += v[i - 1];
for(int i = 1; i < n; i++) ans += v[i] * u[i + 1];
printf("%lld\n",ans);
return;
}int main()
return 0;
}
這個玩意搞了我一整個上午,最後發現是add
函式裡面u
和v
寫了兩遍都是u
連向v
的,真是心態搞炸了。
code:
#include#define gc getchar()
#define rd read()
using namespace std;
const int n = 4e5 + 1;
const int m = 8e5 + 1;
inline long long read()
while(isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48),ch = gc;
return f ? x : -x;
}//complete
int n,m,cnt;
long long q,k,s;
struct nodee[n << 1];
bool cmp(node a,node b)
int hd[n],nxt[m],to[m],tot;
long long dis[m];//建圖
long long d[n],vis[n],ff[n];//kurskal重構樹
priority_queue>q;//dj
long long mi[n],val[n];
int f[n][23];//倍增
void add(const int u,const int v,const long long dist) //complete
inline void dijstra()
} }return ;
}//complete
int findset(const int x)
void dfs(const int u)
return ;
}void kruskal()
}//kruskal重構樹建圖
dfs(cnt);
}inline void input()
dijstra();
kruskal();
for(int i = 1; (1 << i) <= cnt; i++)
for(int u = 1; u <= cnt; u++)
f[u][i] = f[f[u][i-1]][i-1];
q = rd,k = rd,s = rd;
}inline void work()
printf("%lld\n",mi[vi]);
lst = mi[vi]; }}
int main()
return 0;
}
這道題,乃是noi
近幾年來最水的水題,爆搜隨便加個剪枝就能過去,這波啊,這波是出題人的鍋。
直接暴力從第乙個點搜到最後乙個點,如果說能連在一起就連在一起,然後用calc
算一下貢獻就可以了。
當然這個題有乙個剪枝,就是因為時間比較少,所以可以用記憶化搜尋,先記錄當前時間下最少需要多少煩躁值,然後往後面硬搜就可以了。
code :
#include#include#include#include#includeusing namespace std;
templateinline void cmin(t&x,t y)
const int n = 1e5 + 1;
const int m = 2e5 + 1;
const int t = 1e3 + 1;
int a,b,c;
int n,m;
int ans = 1e9 + 7;
int tim[n][t];
struct node
node(const int v,const int sd,const int et)
bool operator<(const node&tem) const
};vectore[n];
inline void input(void)
if(n > m) for(int i = m + 1; i <= n; i++)
}inline void dfs(const int t,const int now,const int val)
return;
}inline void work(void)
int main(void)
該題我只想出來了 \(o(nmt)\) 的暴力,所以說得分只有40pts,然後聽正解是矩陣快速冪優化 dp ,這個就是我不會的了,逃了逃了。 LeetCode 第一題TwoSum題解
1.暴力法求解 思想 利用兩個for迴圈對數字進行遍歷,第乙個for迴圈迴圈位置到nums.length 1,第二個for迴圈起始為i 1.時間複雜度 o n 2 空間複雜度 o 1 public static int twosum int nums,int target throw newille...
USACO 2020二月青銅第一題題解報告
farmer john 想要給他的奶牛們建造乙個三角形牧場。有 n 3 n 100 個柵欄柱子分別位於農場的二維平面上不同的點 x1,y1 xn,yn 他可以選擇其中三個點組成三角形牧場,只要三角形有一條邊與 x 軸平行,且有另一條邊與 y 軸平行。farmer john 可以圍成的牧場的最大面積是...
浙江十套 第一套 解題報告
如果 maxo 0 說明只有 x 答案就是 maxx 如果 x 不夠用,說明每次都是放 maxo 個 o 用乙個 x 隔開 oooooxooooox cdots 此時有 counto ge countx 1 maxo 因此,最大是 countx countx 1 maxo 注意更新 include ...