摘要:
第一题:图标排列百度应用平台上有很多有趣的应用,每个应用都由一个开发者开发,每个开发者可能开发一个或多个应用。百度的工程师们想把应用尽可能好的推荐给用户。研究发现,同一个开发者开发的程序的图标有很大的相似性。如果把同一个开发者开发的应用放在一起,用户很快就会厌倦相似的图标,如果把这些图标穿插摆放效果就会好很多。现在工程师想给用户推荐来自m个开发者的n个应用,在推荐的时候这些应用的图标将排成整齐的一行展示给用户,相邻两个图标之间的距离正好是1,工程师们想让这些图标尽可能的穿插摆放。为了衡量穿插摆放的效果,给每个图标定义一个“分离度”,分离度的值是指当前图标和它左边最近的来自同一个开发者的图标之间 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1671给你一些字符串,判断是否某一些字符串是另一些字符串的前缀,设置节点变量visit表示某一字符串,遍历字典树时检查沿途的界定是否具有标记,并检查末字符节点是否有后继字符,记得释放内存刚才看了牛人的代码,既然是树那么就可以用堆的形式表现出来,访问方便效率也会比较高 1 #include<stdio.h> 2 struct node 3 { 4 node*next[10]; 5 int visit; 6 void ini() 7 { 8 visit=0; 9 for(int i=0;i<10 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1251今天刚看了字典树的资料,想做题练练手,结果很悲剧,字典树调了4个小时才做出一道水题此题题意就是求解单词前缀的数量,通过字典树减少内存,并且查找单词时间只与单词长度有关对于此题主要有一点提示就是,题目明确表示输入不会有相同单词,就是说查找单个字母若已存在字典树中只需将它的前缀数+1即可,而不存在的话就是新开一个节点,前缀数为1 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 struct n 阅读全文
摘要:
我们可以将vector看成是数组的升级,是广义上的数组并且数据类型自己定义,数组元素个数不限vector的定义方式:vector<类型> 变量名初始化方式:vector<T> v1 //默认构造函数v1为空vector<T> v2(v1) //v2成为v1的副本vector<T> v3(n,i) //v3含有n个i元素vector<T> v4(n) //v4含有初始化的元素的个副本在第三种初始化方式中有元素个数和元素值确定了一个vector对象,vector对象而言它希望达到的目的是动态的分配内存,增加元素,而不是预先确定内存大小ve 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1577对于这道题,第一个感觉是建立一个起点与终点的一条直线方程,然后测试是否有夹在起点与终点之间的整数点??????但是这样做效率低,并且代码比较烦(本人曾敲过,悲剧的没有过),然后突然得到灵感,可以用求最大公约数来解具体讲解如何得出此结论:假设起点为(x1,y1),终点为(x2,y2)当中间存在某一点(x3,y3)时,(x3-x1,y3-y1)=k*(x2-x1,y2-y1),那么我们进一步认为起始点是(0,0)时,k*(x3,y3)=(x2,y2)(x3,y3)=(x2,y2)/k,即x2,y2存在公约数 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1715大数模拟,原以为大数已经很熟了,但是今天一打又出现问题,具体看代码 1 #include<stdio.h> 2 #include<memory.h> 3 int add(int num1[],int len,int num2[],int answer[]) 4 { 5 int k=0,c=0; 6 for(int i=0;i<len;i++) 7 answer[k++]=(num1[i]+num2[i]+c)%10000,c=(num1[i]+num2[i]+c)/1000 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1013可以模拟AC,但是我们追求最优解法sum1 2 .....8 9 10 11 ..... 17 18 19 20 .......answer 1 2 .....8 9 1 2 ..... 8 9 1 2 .......由此看出循环节为9此题具有公式,answer=(sum-1)%9+1对于%这个运算符,我得说一下,数据从0,1,2,,,,,,,n-1如此计数是直接用%n是不会有错的,但是当1,2,3,,,,,,n时不能直接%n,当数值为n时结果为0于我们想要的结果不同,所以我们将n转换为n-1如此计算的 阅读全文
摘要:
初始化定义方式:string s1; //默认构造函数,s1是空字符串string s2(s1); //s2初始化为s1string s3("mengxm"); //s3初始化为一个字符串字面值string s4(n,'m'); //s4初始化为字符'm'的n个重复对于字符串字面值"mengxm"在字符串末尾加上一个'\0',而'm'只是单纯的一个字符,这是双引号和单引号的区别对string类型的读写cin>>s;cout<<s<<endl;决不可那c的输 阅读全文
摘要:
http://poj.org/problem?id=1363通过栈模拟,检验有无可能实现输入和输出 1 #include<stdio.h> 2 int sum; 3 int *in,*out,*stack; 4 int inpoint,outpoint,stackpoint; 5 int is_ok() 6 { 7 inpoint=-1,outpoint=0,stackpoint=-1; 8 while(outpoint<sum) 9 {10 if(stackpoint>-1)11 {12 while(out[outpoint]!=stack[stackpoint]&a 阅读全文
摘要:
http://poj.org/problem?id=1102简单模拟 1 #include<stdio.h> 2 #include<string.h> 3 char n1[11]="- -- -----"; 4 char n2[21]="|| | | |||| | |||||"; 5 char n3[11]=" ----- --"; 6 char n4[21]="|| || | | ||| ||| |"; 7 char n5[11]="- -- -- --"; 8 voi 阅读全文