總結——關於2017 11 2測試的分析總結

NOIP 2017 模拟



11 2



T1:




题目:


總結——關於2017 11 2測試的分析總結_第1张图片



——正解思路:


动态规划 / 贪心


——我的乱搞:

tnnd动态规划写炸了,,,,,,,

總結——關於2017 11 2測試的分析總結_第2张图片






——tips:


我能怎么办,,手动对拍了几组都没卡bug,,,,,


你们不要老想着搞个大新闻然后把评测姬批判一番。。


该批判的是该死的linux虚拟机,,,简直有毒




總結——關於2017 11 2測試的分析總結_第3张图片





满载悲伤的代码:


#pragma GCC optimize("O3")

#include 
#include 

using namespace std;

struct node{
	int s, t;
	inline friend bool operator < (const node &a, const node &b) {
		return a.t < b.t;
	}
}a[100001];

inline int read () {
	register int i = 0;
	register char c = getchar();
	while (!isdigit(c)) c = getchar();
	while (isdigit(c)) i = i * 10 + (c ^ 48), c = getchar();
	return i;
}

int main () {
	register int n = read ();
	for (register int i = 1; i <= n; i++) a[i] = (node){read() * 60 + read(), read() * 60 + read()};
	sort (a + 1, a + 1 + n);
	register int end = -1, ans = 0;
	for (register int i = 1; i <= n; i++) if(a[i].s >= end) ++ans, end = a[i].t;
	printf ("%d\n", ans);
	return 0;
}






T2:


题目:


總結——關於2017 11 2測試的分析總結_第4张图片


这题终于让我明白了什么叫 骗分骗样例,暴力出奇迹,,,像 wyw da lao 低头


——正解思路:

二分


——我的乱搞:

本来是一个很好的暴力,然后前缀和没开 long long ,,,蛤蛤蛤蛤蛤。。。。。


總結——關於2017 11 2測試的分析總結_第5张图片

——tips:

数据范围有毒。。。。


然而趁着 zgs 还没有改数据,赶紧 oj 上先交一发暴力,,,



满载悲伤的代码(暴力, 正解懒得打):

#pragma GCC optimize("O3")

#include 

int n, l, r;
double a[20001];

template 
inline void read (T &x) {
	x = 0;
	register char c = getchar();
	while (!isdigit(c)) c = getchar();
	while (isdigit(c)) x = x * 10 + (c ^ 48), c = getchar();
}

int main () {
	read (n), read (l), read (r);
	for (register int i = 1; i <= n; i++) read (a[i]), a[i] += a[i - 1];
	register double ans = 0.0;
	for (register int p = l, q = std::min (l << 1, r); p <= q; p++)
		for (register int i = 1; i + p <= n; i++)
			if (a[i + p] - a[i] > ans * p)
				ans = (a[i + p] - a[i]) / p;
	printf ("%.4f\n", ans);
	return 0;
}






T3:


题目:


總結——關於2017 11 2測試的分析總結_第6张图片



——正解思路:

动态规划

——我的乱搞:

状态压缩 + 马拉车,,貌似马拉车打炸了耶。。。。。。。



總結——關於2017 11 2測試的分析總結_第7张图片




——tips:


我不得不把linux虚拟机批判一番了,,,,今天的代码,两个报 warning, 还 tm disable 不掉,,本是同根生,相煎何太急。。C语言不能坑C语言啊啊啊啊啊啊。。。。


總結——關於2017 11 2測試的分析總結_第8张图片





满载悲伤的代码:

为了省空间,我都把 int 改成 char 了:

#pragma GCC optimize("O3")

#include 
#include 

char s[53], t[53], f[52][52][52][52];

int main () {
	scanf ("%s\n%s", s + 1, t + 1);
	char l1 = strlen(s + 1), l2 = strlen(t + 1), ans = 0;
	for (register char i = 1; i <= l1; ++i)
		for (register char j = 1; j <= l2; ++j)
			for (register char k = l1; k >= 1; --k)
				for (register char l = l2; l >= 1; --l) {
					register char x = f[i][j][k][l];
					if (i < k and s[i] == s[k] and x + 2 > f[i + 1][j][k - 1][l])
						f[i + 1][j][k - 1][l] = x + 2;
					if (j < l and t[j] == t[l] and x + 2 > f[i][j + 1][k][l - 1])
						f[i][j + 1][k][l - 1] = x + 2;
					if (i <= k and j <= l) {
						if (s[i] == t[l] and x + 2 > f[i + 1][j][k][l - 1]) f[i + 1][j][k][l - 1] = x + 2;
						if (t[j] == s[k] and x + 2 > f[i][j + 1][k - 1][l]) f[i][j + 1][k - 1][l] = x + 2;
					}
				}
	for (register char i = 0; i <= l1 + 1; ++i)
		for (register char j = 0; j <= l2 + 1; ++j)
			for (register char k = l1; k >= 0; --k)
				for (register char l = l2; l >= 0; --l) {
					if (i == k and j > l and f[i][j][k][l] + 1 > ans) ans = f[i][j][k][l] + 1;
					if (i > k and j == l and f[i][j][k][l] + 1 > ans) ans = f[i][j][k][l] + 1;
					if (i > k and j > l and f[i][j][k][l] > ans) ans = f[i][j][k][l];
				}
	printf ("%d\n", ans);
	return 0;
}


你可能感兴趣的:(Other)