oj

2020年2月19日 林大OJ习题 vector

徘徊边缘 提交于 2020-02-20 08:46:27
2020年2月19日 vector vector的意思就是向量,在使用时可以看成最大大小为2e9的且大小可变的数组。更多详细内容可见 大佬的vector解析 。 今天的题难度比较亲民,但每道题都有点值得重视的地方。 林大OJ 1675 中间数 签到题。。看清楚输出什么,一开始输出的中间两数的平均数,人都傻了。 # include <bits/stdc++.h> using namespace std ; vector < int > a ; int main ( ) { int n , x ; while ( cin >> x && x ) { a . push_back ( x ) ; } n = a . size ( ) ; if ( n % 2 == 0 ) { printf ( "%d\n" , a [ n / 2 ] + a [ n / 2 - 1 ] ) ; } else printf ( "%d\n" , a [ ( n - 1 ) / 2 ] ) ; return 0 ; } 林大OJ 2128 锯齿矩阵 相当于利用vector开了一个二维数组,只不过比普通的二维数组更容易操作,且可以分别操作。还有就是注意输出空行和清空vector(多组输入)。 # include <bits/stdc++.h> using namespace std ; int n , m ,

UVa OJ 142 - Mouse Clicks (鼠标点击)

前提是你 提交于 2020-02-19 13:53:53
Problem 问题 A typical windowing system on a computer will provide a number of icons on the screen as well as some defined regions. When the mouse button is clicked, the system has to determine where the cursor is and what is being selected. For this problem we assume that a mouse click in (or on the border of) a region selects that region, otherwise it selects the closest visible icon (or icons in the case of a tie). 一般的计算机视窗系统都会在屏幕上放置很多图标和预定义的区域。当鼠标键按下时,系统会检测鼠标点击的位置并确定点中了什么。在这个问题中,我们认为鼠标点击一个区域(点在边上也算)就选中该区域,否则就选中离的最近的可见图标(可能会有多个)。 Consider the following screen: 观察下面的屏幕: A mouse click at 'a'

LeetCode OJ - Combination Sum

走远了吗. 提交于 2020-02-18 04:33:50
题目: Given a set of candidate numbers ( C ) and a target number ( T ), find all unique combinations in C where the candidate numbers sums to T . The same repeated number may be chosen from C unlimited number of times. Note: All numbers (including target) will be positive integers. Elements in a combination ( a 1 , a 2 , … , a k ) must be in non-descending order. (ie, a 1 ≤ a 2 ≤ … ≤ a k ). The solution set must not contain duplicate combinations. For example, given candidate set 2,3,6,7 and target 7 , A solution set is: [7] [2, 2, 3] 解题思路:   设置一个全局数组x来保存每个数使用的数量。x[i] = k 表示第i个数candidate[i]使用了k次

航电OJ C语言-实验6

二次信任 提交于 2020-02-17 22:42:25
1. (20分) 6.2 写一个判断素数的函数,在主函数中输出1~100间的素数信息 输入描述 无 输出描述 输出1~100之间所有的素数,中间用空格隔开 输入样例 无 输出样例 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 用户代码 # include <stdio.h> int main ( ) { int i , j , k ; for ( i = 1 ; i <= 100 ; i ++ ) { k = 0 ; for ( j = 1 ; j <= i ; j ++ ) { if ( i % j == 0 ) k ++ ; } if ( k == 2 ) printf ( "%d " , i ) ; } return 0 ; } 最后保存时间: 2019-11-27 10:56:26 本题得分:20分(1/1) 查看最新评判结果 2. (20分) 6.3 设a,b,c为三个大于零的正整数,计算并输出下列不定方程组解的个数Number以及满足此条件的所有a,b,c之和sum。 题目描述 设a,b,c为三个大于零的正整数,计算并输出下列不定方程组解的个数Number以及满足此条件的所有a,b,c之和sum。 不定方程组为:(1) a+b+c=13 (2)a-c=5,且(a,b,c>0)

力扣 OJ 817. 链表组件

大城市里の小女人 提交于 2020-02-14 12:59:14
给定一个链表(链表结点包含一个整型值)的头结点 head。 同时给定列表 G,该列表是上述链表中整型值的一个子集。 返回列表 G 中组件的个数,这里对组件的定义为:链表中一段最长连续结点的值(该值必须在列表 G 中)构成的集合。 示例 1: 输入: head: 0->1->2->3 G = [0, 1, 3] 输出: 2 解释: 链表中,0 和 1 是相连接的,且 G 中不包含 2,所以 [0, 1] 是 G 的一个组件,同理 [3] 也是一个组件,故返回 2。 示例 2: 输入: head: 0->1->2->3->4 G = [0, 3, 1, 4] 输出: 2 解释: 链表中,0 和 1 是相连接的,3 和 4 是相连接的,所以 [0, 1] 和 [3, 4] 是两个组件,故返回 2。 注意: 如果 N 是给定链表 head 的长度,1 <= N <= 10000。 链表中每个结点的值所在范围为 [0, N - 1]。 1 <= G.length <= 10000 G 是链表中所有结点的值的一个子集. 代码: class Solution { public: bool has(vector<int>& G, int k) { return (lower_bound(G.begin(), G.end(), k) != upper_bound(G.begin(), G.end()

力扣 OJ 70. 爬楼梯

拜拜、爱过 提交于 2020-02-12 15:37:40
题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 代码: class Solution { public: int climbStairs(int n) { if (n > 45)return 0; int list[46]; list[0] = list[1] = 1; for (int i = 2; i <= n; i++)list[i] = list[i - 1] + list[i - 2]; return list[n]; } }; 来源: CSDN 作者: csuzhucong 链接: https://blog.csdn.net/nameofcsdn/article/details/104276805

洛谷OJ P1036 选数

六眼飞鱼酱① 提交于 2020-02-12 11:40:48
题目描述 输入格式 输出格式 基本思路 一次选一个数,注意按照 升序 来选(因为是组合不是排列,避免最终选出的数集重复),采用 递归 的方式,每选完一个数在调用自身选下一个数,直到递归出口(全部选完) 程序清单 #include<stdio.h> #include<math.h> #include<stdbool.h> int a[20+5]; //数组下标代表数在数组中的位置 int amt; int n,k,js=0; bool isprime(int x); void sort(int w,int m); //从上一个数(第w-1个数,位置在m处)开始往后选出下一个数(第w个数)并加入总和,保证不重样 int main() { scanf("%d%d",&n,&k); for(int i=0;i<n;i++) //输入第0到第n-1共n个数(位置即0到n-1) { scanf("%d",&a[i]); } sort(1,-1); //开始选第一个数,缺省第一个数的上一个数位置为-1 printf("%d",js); return 0; } bool isprime(int x) //判断素数 { for(int i=2;i<(int)(sqrt(x))+1;i++) if(x%i==0&&x!=2) return false; return true; } void sort

杭电Oj刷题(2047)

泄露秘密 提交于 2020-02-11 06:49:07
阿牛的EOF牛肉串 题目描述: 今年的ACM暑期集训队一共有18人,分为6支队伍。其中有一个叫做EOF的队伍,由04级的阿牛、XC以及05级的COY组成。在共同的集训生活中,大家建立了深厚的友谊,阿牛准备做点什么来纪念这段激情燃烧的岁月,想了一想,阿牛从家里拿来了一块上等的牛肉干,准备在上面刻下一个长度为n的只由"E" "O" "F"三种字符组成的字符串(可以只有其中一种或两种字符,但绝对不能有其他字符),阿牛同时禁止在串中出现O相邻的情况,他认为,"OO"看起来就像发怒的眼睛,效果不好。 你,NEW ACMer,EOF的崇拜者,能帮阿牛算一下一共有多少种满足要求的不同的字符串吗? PS: 阿牛还有一个小秘密,就是准备把这个刻有 EOF的牛肉干,作为神秘礼物献给杭电五十周年校庆,可以想象,当校长接过这块牛肉干的时候该有多高兴!这里,请允许我代表杭电的ACMer向阿牛表示感谢! 再次感谢! Input 输入数据包含多个测试实例,每个测试实例占一行,由一个整数n组成,(0<n<40)。 Output 对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。 Sample Input 1 2 Sample Output 3 8 通过答案: #include<stdio.h> long long a[50]; //注意类型,不能太小 int f(int n){ //递推 a[0

Ubuntu搭建青岛大学开源OJ

只谈情不闲聊 提交于 2020-02-10 15:04:05
官方文档: https://github.com/QingdaoU/OnlineJudgeDeploy/tree/2.0 我是用Ubuntu16.04 LTS搭的 ,当时在虚拟机上进行操作 , 搭建这个OJ之前 ,先在终端进行一些相关环境的配置! 一、下载一些软件、容器等 刚开始我直接复制上去, 报错了!(当时一脸懵逼) 这里可以拆开这些命令 , 一个一个的下载 sudo apt-get update // 更新 sudo apt-get install vim sudo apt-get install git sudo apt-get install curl sudo apt-get install pythonsudo apt-get install docker-compose 接下来是下载docker容器: 进入到 root 模式 , 然后cd ..退到根目录 , 这里最好是用root模式进行操作 , 不然后docker的一些操作 , 可能会出现权限不足的问题 sudo apt-get install docker.io "docker --version "能查看版本信息就成功了 下载好docker之后, 为docker换一个国内的源, 具体百度:docker换源 换好源了, 就是下载docker镜像 , 我这里是下ubuntu 的镜像 , 也还有centos

力扣 OJ 767. 重构字符串

一曲冷凌霜 提交于 2020-02-09 18:08:44
题目: 给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。 若可行,输出任意可行的结果。若不可行,返回空字符串。 示例 1: 输入: S = "aab" 输出: "aba" 示例 2: 输入: S = "aaab" 输出: "" 注意: S 只包含小写字母并且长度在[1, 500]区间内。 思路: 分2步, 先判断最多的字符是否超过其他所有字符的数量+1,如果超过就无法重构,不超过就可以重构。 其次,按照贪心原则,每次取数量最多的字符即可。 代码: class Solution { public: string reorganizeString(string S) { int num[26] = { 0 }; int len = S.length(); for (int i = 0; i < len; i++)num[S[i] - 'a']++; for (int i = 0; i < 26; i++)if (num[i]>(len + 1) / 2)return ""; string ans = S; char tmp = '0'; for (int i = 0; i < len; i++) { int maxNum = 0, maxId = 0; for (int j = 0; j < 26; j++) { if (tmp - 'a' == j