CF2111B 学习笔记

正如题目名所说,这真的是一个斐波那契数列题。

题意

题目已经说得很清楚了,我就不说了。

唯一要注意的点是

\[f_1=1,f_2=2 \]

不要像我一样因为弄成

\[f_1=1,f_2=1 \]

而调了整整半小时!

思路

注意到

\[f_{n-2}=f_n-f_{n-1}, \]

所以边长为 \(f_{n-2}\) 的正方体可以放进 \(f_n\)\(f_{n-1}\) 的缝隙中,依此类推,所以只用考虑 \(f_{n-1}\)\(f_{n-2}\) 能否放得下就可以了。

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <iterator>
#include <map>
#include <unordered_map>
#include <queue>
#include <string>
#include <cstring>
#include <set>
#include <bitset>
#include <unordered_set>
#include <vector>
#include <deque>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <list>
#include <array>
#include <iterator>
#include <cmath>
#include <new>
#include <random>
#include <cfloat>
#include <cstdlib>
#include <climits>
#include <numeric>
#include <complex>
#include <ctime>
#include <chrono>
#include <thread>
#include <mutex>
#include <future>
#include <exception>
#include <stdexcept>
#include <cstdint>
#include <cassert>
#include <stack>
#include <cctype> // 一大坨头文件
#define Ofile(s) freopen(s".in", "r", stdin), freopen (s".out", "w", stdout)
#define Cfile(s) fclose(stdin), fclose(stdout)
#define mod 998244353
#define fast ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define ciin cin
#define ccout cout
#define iint int
#define init int
#define intt int
#define endll endl // 防手滑
#define maxn 25
using namespace std;

int t, n, m, l, w, h;
int f[maxn];

int main() {
#ifndef ONLINE_JUDGE
//	Ofile("");
//	Cfile("");
#endif
	fast;
	f[1] = 1;
	f[2] = 2; // 小坑点
	for (init i = 3; i <= 20; i++)
		f[i] = f[i - 1] + f[i - 2];
	cin >> t;
	while (t--) {
		cin >> n >> m;
		while (m--) {
			cin >> w >> l >> h;
			if (f[n] > w || f[n] > l || f[n] > h)
				cout << 0;
			else if (f[n + 1] <= w || f[n + 1] <= l || f[n + 1] <= h)
					cout << 1;
				else 
					cout << 0;
		}
		cout << endll; // 多测记得换行
	}
	return 0;
}

通过记录

posted @ 2026-02-02 17:46  constexpr_ll  阅读(0)  评论(0)    收藏  举报