oj

杭电OJ——2030汉字统计

别说谁变了你拦得住时间么 提交于 2020-02-05 13:57:43
题目 汉字统计 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 74491 Accepted Submission(s): 40031 Problem Description 统计给定文本文件中汉字的个数。 Input 输入文件首先包含一个整数n,表示测试实例的个数,然后是n段文本。 Output 对于每一段文本,输出其中的汉字的个数,每个测试实例的输出占一行。 [Hint:]从汉字机内码的特点考虑~ Sample Input 2 WaHaHa! WaHaHa! 今年过节不说话要说只说普通话WaHaHa! WaHaHa! 马上就要期末考试了Are you ready? Sample Output 14 9 解题思路 一开始,看到“汉字机内码”,内心的独白是:“这是啥???计算机组成原理恐惧???” 今天去查了一些资料,稍微了解了一些。嗯一点点突破,那都是进步嘛!!!汉字机内码在计算机中由两个字节表示,且字节最高位是1,数据在计算机中由补码表示,则对应的十进制数是负数的,所以只要统计字符串中值为负数的字节数即可。对了,最后count要除以2,因为刚才说了嘛,汉字由两个字节表示。 关于汉字机内码 我转载了一篇文章,在我的专栏

OJ常用技巧

梦想的初衷 提交于 2020-02-05 03:46:54
OJ常用技巧 0.前言 本文章主要积累一些编程中常用的 骗分技巧 。可能是针对某些特殊的样例才有用,但是也有一定的道理,可能会给大家带来一些新的启示。 1.dfs常用技巧 1.1 适当剪枝 这个不说 1.2 添加返回条件 比如说一个程序只有达到某种条件时才会返回,但是因为条件太少,返回不多,就容易出现DFS爆栈的情况,所以需要增加条件。通常情况下,可以用增加阈值的情况来限制深搜的步骤。比如说: 马的遍历 这道题,( 很明显,这是一道BFS的题 ,但是如果真的要用dfs写的话,就很容易出现超时。) 比如我用如下的代码交这道题的时候,就有一个测试点超时。【如下图所示】 这时候如果真想用dfs交题就可以尝试添加一个dfs的返回条件。代码如下: //count 代表马儿走了多少步 //(x,y) 代表当前的坐标值 void dfs ( int x , int y , int count ) { if ( x > n || x < 1 || y < 1 || y > m ) //如果越界了 return ; if ( cur > 200 ) return ; //肯定小,直接赋值 f [ x ] [ y ] = count ; if ( count + 1 < f [ x - 2 ] [ y + 1 ] ) dfs ( x - 2 , y + 1 , count + 1 ) ; //1

杭电Oj刷题(2033)

旧巷老猫 提交于 2020-02-05 03:35:54
人见人爱A+B 题目描述: HDOJ上面已经有10来道A+B的题目了,相信这些题目曾经是大家的最爱,希望今天的这个A+B能给大家带来好运,也希望这个题目能唤起大家对ACM曾经的热爱。 这个题目的A和B不是简单的整数,而是两个时间,A和B 都是由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。 Input 输入数据有多行组成,首先是一个整数N,表示测试实例的个数,然后是N行数据,每行有6个整数AH,AM,AS,BH,BM,BS,分别表示时间A和B所对应的时分秒。题目保证所有的数据合法。 Output 对于每个测试实例,输出A+B,每个输出结果也是由时分秒3部分组成,同时也要满足时间的规则(即:分和秒的取值范围在0~59),每个输出占一行,并且所有的部分都可以用32位整数表示。 Sample Input 2 1 2 3 4 5 6 34 45 56 12 23 34 Sample Output 5 7 9 47 9 30 通过答案: #include <stdio.h> int main() { int n,Ah,Am,As,Bh,Bm,Bs; int sum1,sum2,sum3; while (scanf("%d\n", &n)!=EOF) { while(n--){ scanf("%d %d %d %d %d %d"

【九度OJ】题目1084:整数拆分

こ雲淡風輕ζ 提交于 2020-02-04 07:58:12
原题: 题目描述: 一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 总共有六种不同的拆分方式。 再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。 用f(n)表示n的不同拆分的种数,例如f(7)=6. 要求编写程序,读入n(不超过1000000),输出f(n)%1000000000。 输入: 每组输入包括一个整数:N(1<=N<=1000000)。 输出: 对于每组数据,输出f(n)%1000000000。 样例输入: 7样例输出: 6 解题思路: 参考: http://www.cnblogs.com/love533/archive/2012/03/29/2423119.html 对于奇数n=2k+1:它的拆分的第一项一定是1,考虑去掉这个1,其实就一一对应于 2k的拆分,因此f(2k+1)=f(2k). 对于偶数n=2k:考虑有1和没有1的拆分。有1的拆分,与(2k-1)的拆分一一对应,与上面奇数的情况 理由相同;没有1的拆分,将每项除以2,正好一一对应于k的所有拆分。因此f(2k)=f(2k-1)+f(k). 需要注意f(n)会很大,不要溢出了。最终结果只要求除以十亿的余数

【纪中OJ】登机

不想你离开。 提交于 2020-02-04 02:45:00
早知道早点敲博赚访问量 Description 小H是机场登机的执行经理。他的工作是优化登机流程。飞机上的座位有S行,编号从1到s,每行有六个座位,标记为A到F。 今天 有n个乘客陆续登机,第i名乘客的座位在第Ri行,则第i名乘客的登机难度等于在他登机时坐在1…R(i-1)行的乘客的人数。 例如,如果有10名乘客,他们的座位是6A,4B,2E,5F,2A,3F,1C,10E,8B,5A,那么他们的登机困难分别是0,0,0,2,0,2,0,7,7,5,则难度总和为23 。 为了降低登机难度,小H想要将飞机座位划分为k个区域。每一个区域必须是连续的行。划分成k个区域之后,乘客的登机顺序不会改变,但是每个乘客的登机难度将只统计该乘客所在区域前面乘客的人数。 例如,在上面的例子中,如果我们把该平面分成两个区域: 5-10行和1-4行 ,然后在第一区域中的乘客的座位为6A,5F,10E,8B,5A;在第二区域中的乘客的座位为4B,2E,2A,3F,1C,这种情况下,登机难度综合为6。 现在,小H不知道该怎么划分这k个区域,才能让乘客的登机难度总和最少。 Input 输入文件第一行包含三个整数N,S,和k,下一行包含n个整数(1≤Ri≤S),输入保证每一行座位由最多有6名乘客。 Output 输出文件包含一个整数,表示登机可能的最小登机难度。 Sample Input 10 12 2 6 4

HDU OJ 1108

我与影子孤独终老i 提交于 2020-02-03 21:35:00
HDU OJ 1108 题目如下: A - 最小公倍数 Input 输入包含多组测试数据,每组只有一行,包括两个不大于1000的正整数. Output 对于每个测试用例,给出这两个数的最小公倍数,每个实例输出一行。 Sample Input 10 14 Sample Output 70 import java . util . Scanner ; public class Main { public static void main ( String [ ] args ) { Scanner sc = new Scanner ( System . in ) ; while ( sc . hasNextInt ( ) ) { int a = sc . nextInt ( ) ; int b = sc . nextInt ( ) ; int s = 0 ; if ( a > b ) { int temp = b ; b = a ; a = temp ; } for ( int i = a ; i <= a * b ; i ++ ) { if ( ( i % a == 0 ) && ( i % b == 0 ) ) { s = i ; break ; } } System . out . println ( s ) ; } } } 1:交换变量值(a,b)的方法: (1

杭电Oj刷题(2027)

别说谁变了你拦得住时间么 提交于 2020-02-03 01:34:40
统计元音 题目描述: 统计每个元音字母在字符串中出现的次数。 Input 输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串。 Output 对于每个测试实例输出5行,格式如下: a:num1 e:num2 i:num3 o:num4 u:num5 多个测试实例之间由一个空行隔开。 请特别注意:最后一块输出后面没有空行:) Sample Input 2 aeiou my name is ignatius Sample Output a:1 e:1 i:1 o:1 u:1 a:2 e:1 i:3 o:0 u:1 通过答案: #include <stdio.h> #include<ctype.h> int main() { char str; int a[5]; int n; scanf("%d\n",&n); //注意换行 while(n--){ a[0]=a[1]=a[2]=a[3]=a[4]=0; //计数初始化 while ((str = getchar()) != '\n') { switch(tolower(str)){ //若有大写则转换为小写 case 'a': //元音字母为a,e,i,o,u a[0]++; break; case 'e': a[1]++; break; case 'i': a[2]++; break; case 'o

力扣OJ 948. 令牌放置

妖精的绣舞 提交于 2020-02-01 01:58:19
题目: 你的初始能量为 P,初始分数为 0,只有一包令牌。 令牌的值为 token[i],每个令牌最多只能使用一次,可能的两种使用方法如下: 如果你至少有 token[i] 点能量,可以将令牌置为正面朝上,失去 token[i] 点能量,并得到 1 分。 如果我们至少有 1 分,可以将令牌置为反面朝上,获得 token[i] 点能量,并失去 1 分。 在使用任意数量的令牌后,返回我们可以得到的最大分数。 示例 1: 输入:tokens = [100], P = 50 输出:0 示例 2: 输入:tokens = [100,200], P = 150 输出:1 示例 3: 输入:tokens = [100,200,300,400], P = 200 输出:2 提示: tokens.length <= 1000 0 <= tokens[i] < 10000 0 <= P < 10000 思路: 排序,贪心。注意tokens为空的情况 代码: class Solution { public: int bagOfTokensScore(vector<int>& tokens, int P) { if(tokens.empty())return 0; int ans=0; sort(tokens.begin(),tokens.end()); auto it1=tokens.begin();

OJ题[选择题总结] -- 四舍五入

眉间皱痕 提交于 2020-01-31 08:22:29
Math.round(11.5)等于12 round表示四舍五入 1、参数的小数点后第一位<5,运算结果为参数整数部分。 2、参数的小数点后第一位>5,运算结果为参数整数部分绝对值+1,符号(即正负)不变。 3、参数的小数点后第一位=5,正数运算结果为整数部分+1,负数运算结果为整数部分。 总结:大于五全部加,等于五正数加,小于五全不加。 举例: 小数点后第一位=5 正数:Math.round(11.5)=12 负数:Math.round(-11.5)=-11 小数点后第一位<5 正数:Math.round(11.46)=11 负数:Math.round(-11.46)=-11 小数点后第一位>5 正数:Math.round(11.68)=12 负数:Math.round(-11.68)=-12 来源: CSDN 作者: asdx1020 链接: https://blog.csdn.net/asdx1020/article/details/104117721

oj --哈夫曼树-求带权路径长度

我是研究僧i 提交于 2020-01-31 07:04:45
题目所描述的有点问题,其实是叶节点的路径与权值乘积之和,即带权路径长度! 用到了c++中小顶堆的创建方法,优先队列。 定义:priority_queue<Type, Container, Functional> Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆 还利用到: 若定义每个结点都有值,为其子女的值之和,那么除了根结点外所有结点之和恰好等于带权路径长度 ,按层级累加的规律不难理解叶子节点的值也是“乘了好多倍” # include <iostream> # include <stdio.h> # include <queue> using namespace std ; priority_queue < int , vector < int > , greater < int > > Q ; int main ( ) { int N ; while ( scanf ( "%d" , & N ) != EOF ) { while ( ! Q . empty ( ) ) Q . pop ( ) ; for