T0 可恶的东西
T1 (0->19)
题目描述:给定N个数ci,要求去掉一些数,使相邻两数的差不等于1(N≤200000 0 ≤ ci ≤ 1000000)
赛时打了个暴力,但没加文件读写,爆零,没改出来
T2 (80->100)
题目描述:有一个数列,a[0]=1,a[i+1]=(A*a[i]+a[i]%B)%C,要求这个数列第一次出现重复的项的下标(30%的数据A,B,C≤10^5;100%的数据 A,B,C≤10^9)
逆天时限:100000ms
因此模拟+map去重就能AC,但赛时因数组大小和a[0]的值没有被映射拿到80分
T3 (0->40)
题目描述:整个广场的地面由两个行和列分别为N1,M1和N2,M2的矩形组成,这两个矩形交叉成十字(N1<N2,M1>M2),在这个图形中,一共有多少个矩形呢?(20%的数据每个数≤100;40%的数据每个数≤10000;100%的数据每个数≤10^99)
赛时没打,赛后请教zmx,得到了公式,得到40分,但数据太大,明显高精度,不想改了
T4 (0->0)
题目描述:有n座小岛,m座桥(双向),每座小岛有一个危险程度D,最多只能冒险经过危险程度为k的小岛,x岛到y岛有一座花时len的桥,Q次询问,给出三个数x,y,k,起点为x,终点为y,最多只能冒险经过危险程度为k的小岛,求出最短通行时间( 100%的数据N≤200,Dn≤100000000,len≤1000, Q≤100000,K≤1000000000)
赛时打了个爆搜RE了,正解是排序+Floyd,还没改
T5(30->100)
题目描述:一只牛开始在(R1,C1)的位置,每一秒内,奶牛会水平或垂直地移动1单位距离(奶牛总是在移动,不会在某秒内停在它上一秒所在的点)。草地上的某些地方有树(’#’),自然,奶牛不能走到树所在的位置,也不会走出草地(’.’),求它在T秒内恰好走到(R2,C2)位置的路径个数(100%的数据 2 <= N <= 100; 2 <= M <= 100,0 < T <= 15)
赛时打了个广搜,但理解错了(广搜做法应得50,实得30),然而只要一个简单的dp,就好了
//核心dp,f[i][j][k]表示在k秒时,牛在(i,j)位置的方案数
int a1, b1, a2, b2;
std::cin >> a1 >> a2 >> b1 >> b2;
f[a1][a2][0] = 1;
for (int k = 1; k <= t; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if(a[i][j]=='*'){
f[i][j][k]=0;
}//树
else f[i][j][k] = f[i - 1][j][k - 1] + f[i + 1][j][k - 1] + f[i][j - 1][k - 1] + f[i][j + 1][k - 1];//草
}
}
}
cout << f[b1][b2][t];
T?
不愧是乱序排题,T2和T5竟然是最简单的,T1我倒觉得是最难的