【心得体会】11.16-11.22

tips

1、最大的回文素数是9989899。

2、注意数据范围,数组不能开太大也不能太开小。(RE警告!)有时候不一定是给的数据的大小,要计算实际数据大小。

3、对于奇怪的WA错误,要注意输出格式(末尾空格),有些OJ没有PE的错误。

改进之处

1、除了训练赛和USCAO系列,题量难度不够,根据队伍内部情况,下周开始加大图论方面的学习,以补足队伍中的图论短板。

2、赛后补题存在拖延现象,原因:1、要补的题目学不会,补不了。2、补题花费时间不够多。

3、链表指针方面掌握不熟练,可以找一部分题目进行训练。

4、USCAO系列还是需要花时间去做一做的。

5、对于答题注意事项,每周心得会写,但是主要还是在另外一个博客里面更新。
https://www.cnblogs.com/Shayndel/p/13983706.html

本周题单

USCAO系列

USACO Training 1.5.1 Number Triangles

数字金字塔,经典入门dp

USACO Training 1.5.2 Prime Palindromes

判回文质数,这题RE好几发,最后发现对回文素数的估计不准确,数组开太大了。(虽然本地编译和洛谷能过,但是这一点还是需要值得注意一下吧,毕竟不知道什么时候评测机卡

USACO Training 1.5.3 Superprime Rib

简单二分+素数吧,比较简单的一道题

USACO Training 1.5.4 Checker Challenge

n皇后问题,用传统回溯法做的,有时间把位运算补上。

总结

以上题目是1.5的内容,都是比较简单的题,但是在一些出锅的细节上,也学到了一些东西把。有时间补1.4。

CF系列

本周算是打了两场CF

一场是周日的div2

题解链接:https://www.cnblogs.com/Shayndel/p/13998829.html

一场是周四的EDU

题解链接:https://www.cnblogs.com/Shayndel/p/14017152.html

训练赛

CCCC训练第三场

本来是想针对这场比赛也写个题解,但是本周有点没时间了,就大概统计一下吧,除了最后几道题,其余算手速水题了。

7-1 求整数均值

从题目得知,是一道水题,算平均值

7-2 矩阵运算

矩阵除副对角线、最后一列和最后一行以外的所有元素之和

7-3 Hello World!

输出Hello World!

7-4 考试座位号

对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码

7-5 求1到N的和

题意同标题

7-6 谷歌的招聘

输出 N 中最早出现的 K 位连续数字所组成的素数

特别的是用到了stoi()函数

7-7 整数算术运算

输出两个数的加减乘除取余

7-8 西安距离

哈密顿距离,输出两个坐标绝对值的和

7-9 Maximum Subsequence Sum

经典最大公共子序列

7-10 列车厢调度

栈模拟

7-12 二叉搜索树的2层结点统计

搜索+链表

7-13 畅通工程之局部最小花费问题

克鲁斯卡尔最小生成树

7-15 凑零钱

简单dfs

总结

这套题难度相对来说较为简单,三个小时,15道题,我过了13道。但是从这套题上发现,我在指针链表运用方面比较欠缺(虽然对比赛而言其实用不太到)但也发现是我自己的一个短板所在吧。

华东师范

这套题不太好做,周五的时候身体不舒服,状态也不太行。过了BA之后就罚坐了

B. 辗转相除法

https://acm.ecnu.edu.cn/contest/340/problem/B/

找一个数据,是所给代码的反例。由题意我们可以得到 30 70 105 这个反例。(但是我还是想了很久很久,30分钟签到)

A. 选择题

https://acm.ecnu.edu.cn/contest/340/problem/A/

看了一年的中文题目,思路:每个年份肯定是有一些是正确答案有一些是错误答案,那么这个年份能出的题就确定了,只要然后哪些人可以作为答案也是确定的
组合数搞一下就行了,一个年能出的题数是C错误答案取3*正确答案,对于一个年份,找到第一个大于等于当前重要年,找到第一个在这之后出生的人

代码:

#include <bits/stdc++.h>
#define int long long
#define ll long long
#define ull unsigned long long
#define Mid ((l + r) >> 1)
#define lson (rt << 1)
#define rson (rt << 1 | 1)
using namespace std;
const int mod = 114514;
int read(){
	char c; int num, f = 1;
	while(c = getchar(),!isdigit(c)) if(c == '-') f = -1; num = c - '0';
	while(c = getchar(), isdigit(c)) num = num * 10 + c - '0';;
	return f * num;
}
int n, m, a[100009], b[100009], d[100009];
main()
{
	n = read(); m = read();
	for(int i = 1; i <= n; i++)a[i] = read();
	for(int i = 1; i <= n; i++)b[i] = read();
	for(int i = 1; i <= m; i++)d[i] = read();
	sort(a + 1, a + 1 + n);
	sort(b + 1, b + 1 + n);
	sort(d + 1, d + 1 + m);
	int fans = 0;
	for(int i = 1; i <= m; i++){
		int l, r, p1, p2;
		ll ans;
		l = 1; r = n;
		while(l <= r){
			if(b[Mid] > d[i]) r = Mid - 1;
			else l = Mid + 1;
		}
		p1 = r;
		//n - p1个错误选项
		//p1个正确选项
		l = 1; r = n;
		while(l <= r){
			if(a[Mid] >= d[i]) r = Mid - 1;
			else l = Mid + 1;
		}
		p2 = r;
		//p2个正确人
		if(n - p1 < 3)continue;
		if(p1 < 1) continue;
		
		ans = (n - p1) * (n - p1 - 1) * (n - p1 - 2) / 3 / 2;
		ans %= mod;
		ans = ans * (p1) % mod * (p2) % mod;
		fans = (fans + ans) % mod;
	}
	printf("%lld
", fans);
	
	return 0;
}

WA了一发,这题告诉我,不开ll见祖宗。

原文地址:https://www.cnblogs.com/Shayndel/p/14019906.html