#include<bits/stdc++.h>usingnamespace std;constint mod =998244353;signedmain(){int n; cin >> n;if(n ==1|| n ==2){
cout <<1;return0;}int a1 =1, a2 =1;for(int i =3; i <= n; i ++){if(i &1) a1 =(a1 + a2)% mod;else a2 =(a1 + a2)% mod;}if(n &1) cout << a1 % mod;else cout << a2 % mod;}
3.斐波那契数列(III)— 矩阵快速幂
#include<bits/stdc++.h>usingnamespace std;#defineintlonglongconstint mod =998244353;voidmatrix_mul(int a[][2]){int tmp[2][2]={0};for(int i =0; i <2; i ++)for(int j =0; j <2; j ++)for(int k =0; k <2; k ++)
tmp[i][j]=(tmp[i][j]% mod + a[i][k]* a[k][j])% mod;memcpy(a, tmp,sizeof tmp);}voidmul(int f[],int a[][2]){int tmp[2]={0};for(int i =0; i <2; i ++)for(int j =0; j <2; j ++)
tmp[i]=(tmp[i]+ f[j]* a[j][i])% mod;memcpy(f, tmp,sizeof tmp);}signedmain(){int n; cin >> n;int f[2]={0,1};int a[2][2]={{1,1},{1,0}};while(n){if(n &1)mul(f, a);matrix_mul(a);
n >>=1;}
cout << f[0]<<'\n';}
4.分形的递归输出
#include<bits/stdc++.h>usingnamespace std;constint mod =998244353;intqmi(int a,int b){int res=1;a=a%mod;while(b){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;}return res%mod;}char g[1010][1010];voiddfs(int x,int y,int n){if(n ==1){
g[x][y]='X';return;}int m =qmi(3, n -2);dfs(x, y, n -1);dfs(x, y +2* m, n -1);dfs(x + m, y + m, n -1);dfs(x +2* m, y, n -1);dfs(x +2* m, y +2* m, n -1);}int n;voidsolve(){int m =qmi(3, n -1);for(int i =1; i <= m; i ++)for(int j =1; j <= m; j ++)
g[i][j]=' ';dfs(1,1, n);for(int i =1; i <= m; i ++){for(int j =1; j <= m; j ++)
cout << g[i][j];
cout <<'\n';}
cout <<'-'<<'\n';}signedmain(){while(cin >> n, n !=-1)solve();}
5.子序列的平均值 — 二分 + 贪心
#include<bits/stdc++.h>usingnamespace std;constint N =100010;int n, m;int a[N];double s[N];boolcheck(double x){for(int i =1; i <= n; i ++) s[i]= s[i -1]+ a[i]- x;double maxv =-1e9, minv =1e9;for(int i = m; i <= n; i ++){
minv =min(minv, s[i - m]);
maxv =max(maxv, s[i]- minv);}return maxv >=0;}signedmain(){
cin >> n >> m;for(int i =1; i <= n; i ++) cin >> a[i];double l =0, r =1e6;while(r - l >1e-6){double mid =(l + r)/2;if(check(mid)) l = mid;else r = mid;}
cout <<(int)(r *1000)<<'\n';}
6.谁没有完成实验?
#include<bits/stdc++.h>usingnamespace std;
unordered_set<int>S;signedmain(){int n, x; cin >> n;for(int i =1; i <= n; i ++){
cin >> x;
S.insert(x);}int q; cin >> q;while(q --){
cin >> x;if(S.count(x)) cout <<"Yes\n";else cout <<"No\n";}}
7.士兵排队 — 贪心 + 数学
#include<bits/stdc++.h>usingnamespace std;constint N =100010;int a[N], b[N];signedmain(){int n; cin >> n;for(int i =0; i < n; i ++) cin >> a[i]>> b[i];sort(a, a + n);for(int i =0; i < n; i ++) a[i]-= i;int res =0;sort(b, b + n);sort(a, a + n);for(int i =0; i < n; i ++){
res +=abs(a[i]- a[n /2]);
res +=abs(b[i]- b[n /2]);}
cout << res <<'\n';}
8.输油管道问题 — 贪心
#include<bits/stdc++.h>usingnamespace std;constint N =100010;int a[N], b[N];signedmain(){int n; cin >> n;for(int i =0; i < n; i ++) cin >> a[i]>> b[i];sort(b, b + n);int res =0;for(int i =0; i < n; i ++)
res +=abs(b[i]- b[n /2]);
cout << res <<'\n';}