oj

东华oj-进阶题第30题

孤人 提交于 2020-02-26 21:49:42
30 求数列项 作者: 朱凯时间限制: 10S章节: 一维数组 问题描述 : 数列是数学世界中一种非常有趣的数字排列规则,它使一串数字相互之间产生了某种联系,变幻无穷。很多数学家对数列产生了浓厚的兴趣,花了很多时间对其进行研究,明明就是其中的一位。一天,他又专注于一种新的数列排列规则,该排列规则满足以下条件: 该数列的第一个数为1。 该数列的第二个数为5。 该数列的第i (其中i > 2)个数为第i - 1个数的数值加上(i - 3) × 3 + 7。 明明很快就推算出了这个数列的前三项数字: 第一项为1。 第二项为5。 第三项为12。(第三项的数字为第二项的数字加上(3 - 3) × 3 + 7,即第三项的数为:5 + (3 - 3) × 3 + 7 = 12) 但是当明明还想继续把数列往下推算的时候,他发现计算量越来越大,计算难度越来越高,计算速度也越来越慢。于是,明明就求助于你这位程序设计专家,帮他写一个程序,计算出数列的前50项,然后当明明需要知道数列中的哪一项的数字时,你就把那一项的数字告诉明明。 明明的问题可以归结为:跟据一个正整数n,要求你输出题目中所描述的数列的第n项数值。 输入说明 : 你写的程序需要从标准输入设备(通常为键盘)中读入多组测试数据,每组测试数据仅占一行,每行仅包括一个正整数n(1 ≤ n ≤ 50)。每组测试数据与其后一组测试数据之间没有任何空行

杭电OJ 1156(C++)

那年仲夏 提交于 2020-02-25 21:09:53
#include <iostream> #include <algorithm> #include <vector> using namespace std; const int MAXN = 200002; int l[MAXN], r[MAXN]; //垂线左侧的点,垂线右侧的点 int y[MAXN]; //y轴坐标 int n, w; struct Line //垂直于x轴的直线 { int x, y; friend bool operator < (Line a, Line b) { return a.x < b.x; } }line[MAXN]; int lowbit(int x) { return x & -x; } void add(int t[], int x, int v) { while (x <= w) { t[x] += v; x += lowbit(x); } } int sum(int t[], int x) { int res = 0; while (x > 0) { res += t[x]; x -= lowbit(x); } return res; } int main(void) { while (cin >> n) { if (n == 0) break; for (int i = 0; i < n; i++) { cin >> line[i

sdnu oj 1283 山师好男友

十年热恋 提交于 2020-02-25 13:05:48
参考https://m.2cto.com/kf/201612/578388.html 可以看出,被按了奇数次数的灯最后是开着的,而被按了偶数次数的灯最后是关着的。 因为是从 2 开始按的, 所以如果一个数有偶数个因子那就会被按奇数次,如果有奇数个因子就会被按偶数次。 所以转化为求 [a, b] 内有偶数个因子的数 这就会涉及到质因子分解定理,即任何正数都能被分解成多个质数的幂次乘积的形式 N=(p[1] ^ e[1])(p[2] ^ e[2])……(p[k]^e[k]),其中p[i]是质数,e[i]是p[i]的幂次。而由这个公式我们又可以导出一个数有多少个因子的计算公式:FactorNumber(N)=(e[1]+1)(e[2]+1)……(e[k]+1)。 因为 奇 * 奇 = 奇, 奇 * 偶= 偶, 偶 * 偶 = 偶,显然判断奇数 FactorNumber(N) 比判断偶数 FactorNumber(N) 简单 那么什么条件下满足FactorNumber(N)是奇数呢?显然必须所有的e[1],e[2],……,e[k]都必须是偶数,这样才能保证e[i]+1是奇数,结果乘积才能是奇数。而由于e[1],e[2],……,e[k]都是偶数,那么N一定是一个完全平方数(因为sqrt(N)=(p[1] ^ (e[1]/2)) ( p[2] ^ (e[2]/2))……*(p[k]^(e[k]

杭电OJ 1152(C++)

≡放荡痞女 提交于 2020-02-25 01:29:06
基础题。输入奇数个点,按输入顺序最中间的点为原点,分成四个象限。 右上、左下象限中点的个数为A的得分,左上、右下象限中点的个数为B的得分,输出两者得分即可。 #include <iostream> using namespace std; const int MAXN = 200005; int point[MAXN][2]; int main() { int n; while (cin >> n) { if (n == 0) break; for (int i = 0; i < n; i++) { cin >> point[i][0] >> point[i][1]; } int x = point[n / 2][0]; int y = point[n / 2][1]; int scoreA = 0, scoreB = 0; for (int i = 0; i < n; i++) { if ((point[i][0] > x && point[i][1] > y) || (point[i][0] < x && point[i][1] < y)) ++scoreA; else if ((point[i][0] > x && point[i][1] < y) || (point[i][0] < x && point[i][1] > y)) ++scoreB; } cout <<

东华OJ 75 弟弟的作业

半城伤御伤魂 提交于 2020-02-24 13:49:09
问题描述 : 你的弟弟刚做完了“100以内数的加减法”这部分的作业,请你帮他检查一下。每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过100的非负整数;c是弟弟算出的答案,可能是不超过200的非负整数,也可能是单个字符"?",表示他不会算。 输入说明 : 输入文件包含不超过100行,以文件结束符结尾。每行包含一道题目,格式保证符合上述规定,且不包含任何空白字符。输入的所有整数均不含前导0。 输出说明 : 输出仅一行,包含一个非负整数,即弟弟答对的题目数量。 输入范例 : 55+12=67 15-8=7 100-35=? 83-50=33 4-3=6 81+5=21 输出范例 : 3 #include <stdio.h> int main(){ int a,b,c,count=0; char s[99]; while(scanf("%s",&s)==1) { if(sscanf(s,"%d+%d=%d",&a,&b,&c)==3&&a+b==c) count++; if(sscanf(s,"%d-%d=%d",&a,&b,&c)==3&&a-b==c) count++; } printf("%d\n",count); return 0; } 来源: CSDN 作者: 叁佰君 链接: https://blog.csdn.net

杭电OJ 1148(C++)

不打扰是莪最后的温柔 提交于 2020-02-23 04:30:33
基础题。 #include <iostream> #include <string> #include <cstring> #include <iomanip> using namespace std; const int MAXN = 105; int success[MAXN]; //每名选手胜利的次数 int failure[MAXN]; //每名选手失败的次数 int main() { int n, k; int p1, p2; //选手 string s1, s2; int Case = 0; //测试用例组数(用于规范输出) while (cin >> n) { if (n == 0) break; cin >> k; memset(success, 0, sizeof(success)); memset(failure, 0, sizeof(failure)); for (int i = 0; i < k; i++) { cin >> p1 >> s1 >> p2 >> s2; if (s1 == "rock") { if (s2 == "paper") { ++failure[p1]; ++success[p2]; } else if (s2 == "scissors") { ++success[p1]; ++failure[p2]; } } else if (s1

郑州轻工业大学OJ python1092: 素数表(函数专题)

好久不见. 提交于 2020-02-22 18:54:19
1092: 素数表(函数专题) 题目描述 输入两个正整数m和n,输出m和n之间的所有素数。 要求程序定义一个prime()函数和一个main()函数,prime()函数判断一个整数n是否是素数,其余功能在main()函数中实现。 int prime(int n) { //判断n是否为素数, 若n为素数,本函数返回1,否则返回0 } 对于C/C++代码的提交,本题要求必须通过定义prime函数和main函数实现,否则,提交编译错误,要提交完整的程序。 输入 输入两个正整数m和n,m<=n,且都在int范围内。 输出 输出占一行。输出m和n之间的所有素数,每个数后有一个空格。测试数据保证m到n之间一定有素数。 样例输入 2 6 样例输出 2 3 5 def prime ( i ) : m = i if m == 1 : return 0 k = m ** 0.5 k = int ( k ) for i in range ( 2 , k + 1 ) : if m % i == 0 : return 0 return 1 m , n = map ( int , input ( ) . split ( ) ) for i in range ( m , n + 1 ) : if prime ( i ) != 0 : print ( "%d" % i , end = ' ' ) 来源: CSDN

Virtual Judge使用指南

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-22 06:34:08
https://cn.vjudge.net/ Virtual Judge并不是常规的Online Judge平台,他通过爬取其他OJ的题目,让我们可以直接在VJ上查找并提交各种OJ的题目,然后将我们的题目通过他的账号(比如你在cf上会看到用户名vj1、vj2……在HDU上会看到张翼德、马孟起……)在真正的OJ上提交并把结果反馈给我们。大概就相当于一个平台一个中介吧。貌似ACM选手使用得较为普遍? 右上角注册登录; 界面这些OJ是他可以爬到题目的,也就是我们可以直接在VJ里做题的。每个图标也可以直接点进去,就会跳转出这个OJ的页面,比如我点一下POJ,跳出: 另外我圈住的HYSBZ就是OI常用的BZOJ。 按上方功能顺序介绍: Problem: 下面是Problems界面截图: OJ可以自己选择,Prob可以输入题号更快查找,Title是题目名字,Filter过滤题目,Reset重置。如果你登录账号了的话,左侧还会有你的做题情况。 选个题点进去是这个画风: Submit提交代码并测评;Favorite把此题设为收藏;Submissions是关于此题的提交;Leaderboard是按运行时间、使用内存、代码量来排名的此题AC排名: 绿色的“C++”表示这份代码主人是公开的,你点一下就可以查看他当时提交的代码~ 公开代码的方式是在提交时Share一栏选择Yes,Solution部分放代码

杭电OJ 1144(C++)

浪子不回头ぞ 提交于 2020-02-21 22:28:14
基础题。将选择的课程存入数组中,查找每类课程中被选择的课程数量是否满足要求,所有种类的课程都满足要求时,输出"yes",否则输出"no"。 #include <iostream> #include <string> #include <algorithm> using namespace std; const int MAXN = 105; int main() { int k, m; string select[MAXN]; //选择的课程 while (cin >> k) { if (k == 0) break; cin >> m; for (int i = 0; i < k; i++) { cin >> select[i]; } int c, r; string course; int sum; //每类课程中被选择课程的数量 bool flag = true; for (int i = 0; i < m; i++) { cin >> c >> r; sum = 0; for (int j = 0; j < c; j++) { cin >> course; //如果当前课程被选中 if (find(select, select + k, course) != select + k) ++sum; } if (sum < r) flag = false; } if (flag)

力扣 OJ 130. 被围绕的区域

拟墨画扇 提交于 2020-02-21 17:33:48
题目: 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。 示例: X X X X X O O X X X O X X O X X 运行你的函数后,矩阵变为: X X X X X X X X X X X X X O X X 解释: 被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。 代码: class Solution { public: void solve(vector<vector<char>>& board, vector<vector<char>>& ans, int r, int c) { if (r < 0 || r >= board.size())return; if (c < 0 || c >= board[0].size())return; if (board[r][c] == 'X')return; if (ans[r][c] == 'O')return; ans[r][c] = 'O'; solve(board, ans, r, c + 1); solve(board, ans, r, c - 1