Test on 12/08/2018
新生赛新生赛,讲真,没有考什么难的东西,至少我写出来的都不难,估计我是被以前一中的难度吓到了。晚上打了游戏,中午还在打,急急忙忙抄了模板,哈哈哈跟oi的不同就是可以带书有模板抄。因为打了游戏还抄了快速幂,快排、归并的模板,天气恶劣,导致我差一点点迟到。虽然安慰自己剩下的两个小时都是在发呆、可是提前拿到一血速度快可以使排名高一点。太险了,打着伞冲到机房幸好题目还没有开,开了电脑,正在敲头文件的时候题目开了。好像zstu的题目都是1、2题难,喜欢把签到题简单题放到中等偏下的位置。跟noip不一样很难受。
当时太慌啦,来不及看下面的题,1、2题太难了,还说题目比杭电要难一点。抓到一个bfs模板题就赶紧写。但是bfs还是考虑的东西有点多,虽然前一星期一直再写。虽然保证肯定能写出来,但是还是不够稳。
写完了bfs看了看榜找了找签到题写。转专业狗很着急,真的害怕前几星期吹的要转最后没转。后来发现一道题有奖、两道题有钱是什么操作。
罗马数字感觉以前做过,然后约瑟夫环的问题在书上看过了啊,但是前几天书到期了还没带卡就没有续借,把所有书都带上了还是永远缺少没带的那一本。
还有一道概率题,是VJ上的背包原题,哈哈哈我早就写过背包啦,因为想努力的把dp学会,虽然现在还没有学会,但是还是会这个简单背包的。可是一连4个wa,很难受,明明就是这样写的啊,害怕超时吓得我连memset都不敢写,后来发现 f[0]没有初始!
最后约瑟夫环找233人,都说打表,什么什么优化,我都听不懂,可我就是先输入然后处理再输出就 tle,于是我把所有都先预处理一遍存到数组里,需要的时候直接输出就好,虽然不知道到底优化了哪些,但是我居然A了。
有人邀请我去看中医药的比赛,可是想要去班级轰趴过生日就拒绝了,实则因为自己害怕暴露太差的事实23333.
有钱啦有钱啦,原本想这周日去上海看漫展的,同学有事就改到了周六,周六训练,翘啦。(dbq,我配不上第三这个称号,我周日一定全天都在机房,并且努力的多参加比赛多敲code少玩游戏),准备买jks,买粉色人形师,请班里人吃蛋糕。班里人真多,可是没办法qaq。应该要好好过一个18岁生日的。生日在23号,21号请吃蛋糕,22号中医药比赛就不去了,睡一觉还是在机房学习吧。23号去演出拍点照片发说说啦。成人啦成人啦。
原本觉得一轮选课我肯定是计算机的人鸭,都拿奖了肯定是稳啦,我要选计算机的课!可是都劝我不要选(委屈巴巴)我还想要学日语、我不想每天早上上课、我想要周三或者周五一整天都没有课,可是生活哪有你想的那么简单。专业课好多,水课好多,还要转专业,还是要努力啊。没有早晚自习的日子我来了。
去看了看计算机的课表,欸这跟我数学专业有什么区别,我以为他们会学点有关计算机的什么网站制作啊,bulabulabula,(我要是都知道,我就不转计算机了)鬼知道,他们怎么跟数学一样的啊。数学下学期三门数学课 计算机下学期两门数学课 学的数学还都不一样的啊啊啊,真好。
下一阶段,我要学会dp,我要用熟cb,我要学会单步调试,(不然也太难受了。)
一号机房空调真暖和,吹到脑袋都不转了。在杭州冷到爆炸。
头疼的Litmxs
Description
今天队友扔了个题给 Litmxs,小 Litmxs 很吃惊,因为这题似曾相识,却又无从下手,他又来求助于你们了!队友给了 Litmxs 一个整数 n(10进制),要求 Litmxs 将 n 转化为 k 进制。如果能转化为 k 进制,上天将会让 Litmxs 偶遇他的女朋友。你能帮帮他吗?
Input
输入一个q代表q次询问, 每组数据两个数n,k,保证答案存在
(q <=110,0<=n<=1e9, k==-2 || k==2)
Output
输出对应的k进制,不要有多余的换行和空格
Examples
Input
2 5 2 5 -2
Output
101 101
正确解法:
啊啊啊啊啊,-2进制是想让我死。
十进制转2进制的时候,因为 / 了一下,所以丢掉了余数,而你要转 -2 进制的时候,就要把这个余数找回来。
怎么回来呢,n=(n+1)/2
还是判断把,因为当是偶数位的时候,对于2进制来说是 +,对于 -2 进制来说就是 - 了。
找到这个存在余数的时候,并且是在偶数位,就要找一下余数。
1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<cstring> 5 #include<map> 6 #include<set> 7 #include<algorithm> 8 #include<cmath> 9 #include<stdlib.h> 10 using namespace std; 11 void zheng(int n) 12 { 13 int c[110], kk = 0; 14 if (n == 0) { 15 printf("0\n"); return; 16 } 17 while (n != 0) 18 { 19 c[++kk] = n % 2; 20 n = n / 2; 21 } 22 for (int i = kk; i >= 1; i--) 23 printf("%d",c[i]); 24 printf("\n"); 25 } 26 void fu(int n) 27 { 28 int c[110], kk = 0; 29 if (n == 0) { 30 printf("0\n"); return; 31 } 32 while (n != 0) 33 { 34 c[++kk] = n % 2; 35 if (c[kk] == 1 && kk % 2 == 0) 36 n = (n + 1) / 2; 37 else n = n / 2; 38 } 39 for (int i = kk; i >= 1; i--) 40 printf("%d",c[i]); 41 printf("\n"); 42 } 43 int main() 44 { 45 int t; 46 scanf("%d",&t); 47 while (t--) 48 { 49 int n, k; 50 scanf("%d %d",&n,&k); 51 if (k == 2) zheng(n); 52 else fu(n); 53 } 54 55 return 0; 56 }
曼哈顿距离
Description
在平面上,坐标(x1, y1)的点P1与坐标(x2, y2)的点P2的曼哈顿距离为:|x1-x2|+|y1-y2|。 现在有一个nXn (1<=n<=1000)的矩阵,一开始矩阵中每个元素的值都为零。 对这个矩阵进行m (1<=m<=100000)次操作,每次操作定义如下:
(x1, y1), (x2, y2): 对于矩阵中满足x1<=x<=x2, y1<=y<=y2的所有元素(x, y)加上(x, y)与(x1, y1)的曼哈顿距离|x1-x|+|y1-y|
例如,当n=5,m=2,两组操作分别为(1, 1), (4, 4)和(2, 2), (5, 5):
现在想让你输出m次操作后的矩阵,但是由于本OJ输出文件不能超过1M,所以输出矩阵所有非零元素的乘积即可 (结果对1000000007取余),没有非零项则输出0;
Input
第一行两个整数n, m,分别表示正方形网格的边长和操作次数;
接下来m行,每行4个整数x1 y1 x2 y2;
Output
输出一个整数代表答案。
Examples
Input
5 2 1 1 4 4 2 2 5 5
Output
853543927
正确解法:
因为题目是 x-x1 + y-y1 的距离,我们很容易想到二维差分标记
开两个二维数组,把x和y分别算。
主要是二维差分标记难了一点,边界值没看懂。
1 fx[x1 + 1][y11] += 1; 2 fx[x2 + 1][y11] += -1; 3 fx[x2 + 1][y11] += -(x2 - x1); 4 fx[x2 + 2][y11] += (x2 - x1); 5 fx[x1 + 1][y2 + 1] -= 1; 6 fx[x2 + 1][y2 + 1] -= -1; 7 fx[x2 + 1][y2 + 1] -= -(x2 - x1); 8 fx[x2 + 2][y2 + 1] -= (x2 - x1);
1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<cstring> 5 #include<map> 6 #include<set> 7 #include<algorithm> 8 #include<cmath> 9 #include<stdlib.h> 10 using namespace std; 11 const int mad = 1000000007; 12 int n, m,x1,y11,x2,y2; 13 int fx[1100][1100],fy[1100][1100]; 14 void print() 15 { 16 for (int i = 1; i <= n; i++) 17 { 18 for (int j = 1; j <= n; j++) 19 printf("%d ",fx[i][j]+fy[i][j]); 20 printf("\n"); 21 } 22 } 23 int main() 24 { 25 scanf("%d %d",&n,&m); 26 while (m--) 27 { 28 scanf("%d %d %d %d",&x1,&y11,&x2,&y2); 29 fx[x1 + 1][y11] += 1; 30 fx[x2 + 1][y11] += -1; 31 fx[x2 + 1][y11] += -(x2 - x1); 32 fx[x2 + 2][y11] += (x2 - x1); 33 fx[x1 + 1][y2 + 1] -= 1; 34 fx[x2 + 1][y2 + 1] -= -1; 35 fx[x2 + 1][y2 + 1] -= -(x2 - x1); 36 fx[x2 + 2][y2 + 1] -= (x2 - x1); 37 38 fy[x1][y11 + 1] += 1; 39 fy[x1][y2 + 1] += -1; 40 fy[x1][y2 + 1] += -(y2 - y11); 41 fy[x1][y2 + 2] += (y2 - y11); 42 fy[x2 + 1][y11 + 1] -= 1; 43 fy[x2 + 1][y2 + 1] -= -1; 44 fy[x2 + 1][y2 + 1] -= -(y2 - y11); 45 fy[x2 + 1][y2 + 2] -= (y2 - y11); 46 } 47 int tt = 2; 48 while (tt--) 49 { 50 for (int j = 1; j <= n; ++j) 51 for (int i = 1; i <= n; ++i) 52 fx[i][j] += fx[i - 1][j]; 53 } 54 for (int i = 1; i <= n; i++) 55 for (int j = 1; j <= n; j++) 56 fx[i][j] += fx[i][j - 1]; 57 tt = 2; 58 while (tt--) 59 { 60 for (int i = 1; i <= n; ++i) 61 for (int j = 1; j <= n; ++j) 62 fy[i][j] += fy[i][j - 1]; 63 } 64 for (int j = 1; j <= n; ++j) 65 for (int i = 1; i <= n; ++i) 66 fy[i][j] += fy[i - 1][j]; 67 long long ans = 1; 68 int flag = 1; 69 for (int i = 1; i <= n; i++) 70 for (int j = 1; j <= n; j++) 71 { 72 if (fx[i][j] + fy[i][j] != 0) 73 { 74 flag = 0; 75 ans = (ans*(fx[i][j] + fy[i][j])) % mad; 76 } 77 } 78 if (flag == 1) printf("0\n"); 79 else printf("%lld\n",ans); 80 return 0; 81 }