oj

jarvis OJ部分writeup

梦想与她 提交于 2019-12-21 04:25:57
[XMAN]level 0 [XMAN]level 1 —— 简单shellcode利用 [XMAN]level 2 [XMAN]level 3 —— ret2libc尝试 [XMAN]level2&level3 x64 [XMAN]level 4 —— DynELF [XMAN]level 5 smashes ——SSP leak & ELF重映射 Test Your Memory ----?level1? /*************************************************************************************************************/ level4 ——DynELF DynELF是在没有libc文件情况下,通过对任意地址的读,获得函数地址的工具 通常情况下,可以通过leak两个函数got中所存的地址,从而确定libc版本,获得所需函数地址 libc版本查询 但在查库无法确定版本的情况下,可以使用DynELF在内存中搜索。但DynELF容易超时,慎用 以level4为例,简单记录DynELF的用法 获取文件 程序保护和程序漏洞都没有设置障碍,可以直接通过一次read实现溢出 经过尝试,无法通过write.got和read.got中的地址找到libc版本,也不方便实现system_call

Comet OJ Contest 4

和自甴很熟 提交于 2019-12-20 02:52:00
  A:签到。 #include<bits/stdc++.h> using namespace std; #define ll long long #define inf 1000000010 char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;} int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() { int x=0,f=1;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f; } int T,a[6],cnt[6]; signed main() { T=read(); while (T--) { for (int i=1;i<=5;i++) a[i]=read(); memset(cnt,0,sizeof(cnt)); for (int i=1;i<=5;i++) cnt[a[i]]++; int mx=0; for (int i

[Jarvis OJ] -Basic

梦想的初衷 提交于 2019-12-16 00:12:31
https://www.jarvisoj.com/challenges  Basic -.-字符串 请选手观察以下密文并转换成flag形式 ..-. .-.. .- --. ..... ..--- ..--- ----- .---- ---.. -.. -.... -.... ..... ...-- ---.. --... -.. .---- -.. .- ----. ...-- .---- ---.. .---- ..--- -... --... --... --... -.... ...-- ....- .---- ----- flag形式为32位大写md5 步骤: 解密好助手: http://tool.ph0en1x.com/hashtool/tools.html#conv/FLAG522018D665387D1DA931812B77763410 A Piece Of Cake 给出一段文字:太长了不想cp,甩进https://quipqiup.com/ 词频分析,缺少b,把b补上看看 手贱 某天A君的网站被日,管理员密码被改,死活登不上,去数据库一看,啥,这密码md5不是和原来一样吗?为啥登不上咧? d78b6f302l25cdc811adfe8d4e7c9fd34 请提交PCTF{原来的管理员密码} 步骤: 直接甩cmd5无果 此md5 33位?十六进制?多了一位??

校队选拔

家住魔仙堡 提交于 2019-12-10 17:57:23
http://10.8.128.203:7217/contest.php?cid=1065 总rank :14 19级rank:4 校区rank:2 A: 签到题; D: 模拟即可; H: 排序即可; I: lower_bound 和 upper_bound 可能是oj的原因 这样写会WA, 这样写就A掉了…… K: tong[i],表示数i出现的次数; 由于p很小的时候,满足条件的数可能很多,于是我们提前将p <= sqrt(n)时的表打好; num[p][x],模p为x的数的个数; 每次修改时只要扫一遍修改num数组即可; 可能是oj的原因 这样写会T; 但是这样写会A掉; 所以以后就要注意啊,还是沿用下面的写法,以防万一。 M: KMP预处理Next数组,然后判断就行了。 N: 分解质因数,然后统计2和5的个数,输出小的个数就是0的个数。 来源: https://www.cnblogs.com/cgold/p/12017897.html

OJ水题

元气小坏坏 提交于 2019-12-10 08:55:59
1.已知含有10个整数的查找表如下:(9,13,15,7,45,32,56,89,60,36),从键盘上输入一个整数,用顺序查找的方法在查找表中查找该整数。若存在,输出该元素的下标值,否则,输出-1。 Input 输入一个整数 Output 如找到输出被找元素的下标值,否则,输出-1 Sample Input 56 Sample Output index=7AC代码: 1 #include <cstdio> 2 #include <cmath> 3 #include <algorithm> 4 using namespace std; 5 #define N 10 6 int seqSearch(int array[],int k) 7 { 8 int i=N; 9 array[0]=k; 10 while(array[i]!=k) i--; 11 return i; 12 } 13 int main() 14 { 15 int array[N+1]={0,9,13,15,7,45,32,56,89,60,36}; 16 int a; 17 scanf("%d",&a); 18 int p=seqSearch(array,a); 19 if(p!=0) printf("index=%d\n",p); 20 else printf("index=-1\n"); 21 return 0

SJTU OJ 1282 修路 题解

戏子无情 提交于 2019-12-10 06:58:25
1282. 修路 Description 蹦蹦跳跳结束后,cxt回头看看自己走过的路坑坑洼洼的,心中非常不爽,他表示要把这段路的路面高度修成单调上升的或者单调下降的,整条路可以看成 N段,N个整数A1,…..,An(1<=n<=2000)依次描述了每一段路的高度(0<=Ai<=1000000000)。 希望找到一个恰好含N个元素的不上升或不下降的序列B1,……,Bn,作为修过的路中每个路段的高度。 由于将每一段路垫高或挖低一个单位消耗的体力相同,于是可以表示为: |A1-B1|+|A2-B2|+…..+|An-Bn| 请你计算一下,要修好这段道路,最少消耗多少体力。消耗的总体力不会超过2^31-1 Input Format 输入文件的第一行仅有一正整数N,以下的N行每行一个整数Ai,表示路面的高度。 Output Format 输出文件仅有一个正整数,表示如果把路修成高度不上升或不下降的最小花费 Sample Input 7 1 3 2 4 5 3 9 Sample Output 3 Hint 将第一个高度为3的路段的高度减少为2,将第二个高度为3的路段的高度增加到5,总花费为|2-3|+|5-3|=3,并且各路段的高度为一个不下降序列 1,2,2,4,5,5,9。 ================================ 题解正文 ====================

SJTU OJ 2105 最大矩形

只谈情不闲聊 提交于 2019-12-10 06:45:40
2105. 最大矩形 Description cs的妈妈买回来好多好多很长的纸条,这些纸条的宽度都是1,长度不同。淘气的cs把这些纸条剪了好多刀变得乱七八糟。 cs看到这么多长长短短的纸条实在是无聊,于是把这些纸条全都摆了起来,变成下图: 摆成的纸条如左图,现在cs想知道其中最大的矩形是什么(如右图阴影部分),请你告诉她这其中最大的矩形面积是多少。 Input Format 第一行,一个整数N,表示有N个纸条。 第二行,N个用空格隔开的整数 h 1 , h 2 , ⋯ , h n ,表示每个纸条的长度 Output Format 一行,最大矩形的面积大小 Sample Input 7 2 1 4 5 1 3 3 Sample Output 8 Sample Input 4 1000 1000 1000 1000 Sample Output 4000 About Testdata 20%的数据, N ≤ 100 40%的数据, N ≤ 1000 100%的数据, N ≤ 100 , 000 , 0 < h i < 1 , 000 , 000 , 000 Limits Time limit: 1000ms, memory limit: 65536kb. =====题解正文=== 题目解读: 这道题目比较简单,用普通的做法来回扫两遍计算一下就能过,不过后来了解到有o(n

JAVA筑基期OJ练习(一)——设计链表

*爱你&永不变心* 提交于 2019-12-09 22:23:34
OJ链接: 707. 设计链表 题目要求:在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。 addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。 addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。 addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。 deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。 示例: MyLinkedList linkedList = new MyLinkedList ( ) ; linkedList . addAtHead ( 1 ) ; linkedList . addAtTail ( 3 ) ; linkedList . addAtIndex ( 1 , 2 ) ; //链表变为1-> 2-> 3 linkedList . get ( 1 ) ; //返回2 linkedList . deleteAtIndex ( 1 ) ; /

初学ACM

可紊 提交于 2019-12-09 20:53:43
题目重述: 问题描述 要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1. 不作任何处理; 2. 在它的左边加上一个自然数,但该自然数不能超过原数的一半; 3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止. 输入 一个自然数n 输出 一个数,表示满足条件的数的个数 样例输入 6 样例输出 6 提示 样例说明:满足条件的数是6,16,26,126,36,136 假设不考虑重复的情况,那么采用下面公式即可: 只需要一个数组,很容易写出下面这个程序: #include <iostream> #include <cstring> using namespace std; int ans[100005]; int main() { int n; cin>>n; for(int i=0; i<=n; i++) ans[i] = 1; for(int i=2; i<=n; i++) { for(int j=1; j<=i/2; j++) ans[i] += ans[j]; } cout<<ans[n]<<endl; return 0; } 这个程序已经可以AC南京邮电大学OJ的测试数据了,但却过不去FOJ 1207,原因是没有考虑重复生成的情况。 下面我们来看一个重复生成的情况: 60-(添加24)

Comet OJ - Contest #15题解

让人想犯罪 __ 提交于 2019-12-09 00:12:31
A 双十一特惠 (简单版) n <= 1e19, 1e9 > 1(8) https://www.cometoj.com/contest/79/problem/A?problem_id=4198 #include<bits/stdc++.h> using namespace std; int main(){ int t; cin >> t; while(t--) { int cnt1 = 0; int n;cin >> n; int pr[] = {1,11,111,1111,11111,111111,1111111,11111111,111111111}; for(int i = 8; i >= 0; i--) { cnt1 += n/pr[i]; n %= pr[i]; } if(cnt1 > 9) cout << "Impossible\n"; else cout << cnt1 << endl; } return 0; } D 困难版 https://www.cometoj.com/contest/79/analysis // dm聚聚在线讲题, 走过路过不要错过 可以假设一个 特殊的进制, 1 11 111 1111 ………… 然后将十进制数转为这个进制, 比如说 234 -> 2,1,1(2*111+1*11+1) 该进制下的位数相加为所需要的 “好的数” 的数量,