水果 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8752 Accepted Submission(s): 3482 Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想 要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了. Input 第一行正整数N(0<N<=10)表示有N组测试数据. 每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行 数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字 母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成. Output 继续阅读 >>


王良 18/02/06 21:54:55
何为最长公共子序列?百度百科定义如下:一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。 首先,我们来介绍一下子串与子序列 的区别:子串是一个字符串中的连续字符的集合;子序列是一个字符串中任意字符的集合,不一定要连续。 然后,如何来求得最长公共子序列呢?最直接的一种方法就是暴力求解,通过比较两个字符串的所有子序列,得到公共子序列,最终得到长度最长的长度。然而这种方法的时间复杂度达到了O(2^n),可见这种方法耗时太长。 所以,我们需要一种更加高效的算法来解决,那就是动态规划。我们可以将求最长公共子序列分解为若干个子问题,即求str1的前i个字符与str2的前j个字符的最长公共子序列,我们假设用maxLen( i, j )来表示。 那maxLen(i, j)怎么求呢?此时,可以分为两种情况:str1[ i - 1 ] == str2[ j - 1 ]与str1[ i - 1 ] != str2[ j - 1 ](str1的第 继续阅读 >>


王良 18/02/03 22:58:15
EPOLLONESHOT 事件 EPOLLONESHOT 事件 使用EPOLLONESHOT的原因及优点 recv返回值 及 与errno的配合使用 示例程序 1. 使用EPOLLONESHOT的原因及优点 即使使用ET模式,一个socket上的某个事件还是可能被触发多次。比如:一个线程在读取完某个socket上的数据后开始处理这些数据,而在数据的处理过程中该socket上又有新数据可读(EPOLLIN再次被触发),此时另外一个线程被唤醒用来读取这些新的数据。于是就出现了两个线程同时操作一个socket的局面。而我们希望一个socket连接在任一时刻都只能被一个线程处理,这就可以通过EPOLLONESHOT事件实现。 对于注册了EPOLLONESHOT事件的文件描述符,操作系统最多触发其上注册的一个事件,且只触发一次,除非我们使用epoll_ctl函数重置该文件描述符上注册的EPOLLONESHOT事件。这样,在一个线程使用socket时,其他线程无法操作so 继续阅读 >>


王良 18/02/03 19:23:31
epoll 系统调用 1. 内核事件表 epoll使用一系列函数来完成任务,把用户关心的文件描述符中的事件放到内核里的一个事件表中,因此不用像select、poll那样每次调用都要重复传入文件描述符集或事件表。epoll需要一个文件描述符来唯一标识该事件表,该文件描述符使用epoll_create函数创建: #include <sys/epoll.h> int epoll_create( int size ); size 标记事件表大小。该函数返回的文件描述符将用作其他所有epoll系统调用的第一个参数,以指定要访问的内核事件表。 epoll_ctl函数用于操作epoll的内核事件表: #include <sys/epoll.h> int epoll_ctl( int epfd, int op, int fd, struct epoll_event * event ) fd参数是要操作的文件描述符,op参数指定操作类型( 继续阅读 >>


王良 18/02/02 20:09:44
题意: 有n只兔子在不同的位置,任意一只兔子可以跳到其余任两只兔子(必须保证它们中间有空位)中间,问最多可移动多少次? 思路: 可看作从任一侧的兔子向中间插空,因此可以将所有兔子中间的空位数相加,再减去两侧较小的数字(最左侧两只兔子间距离与最右侧两只兔子间距离的较小的值)。 AC代码: #include<iostream> #include<vector> #include<cstring> using namespace std; int main() { int t, n, sum, addr[500]; int front, rear; cin >> t; while(t--) { sum = 0; memset(addr, 0, sizeof(addr)); cin >> n >> addr[0]; 继续阅读 >>


王良 17/12/21 22:09:16
1. 引用变量 引用是已定义变量的别名,若使用int & x = a;,即将x作为a的引用,其中的&不是地址运算符,而是类型标识符的一部分。事实上,x与a指向的是同一块内存空间,对x进行操作即对a进行操作。必须在声明引用变量时进行初始化。 /* ** 该程序试图通过指针改变引用变量x的指向 ** 体现了引用与指针的区别 */ int a = 100; int *p = &a; //指针p指向a int & x = *p; //x作为*p的引用,即对a的引用 int b = 50; p = &b; //将指针p指向b,试图修改x为b的引用(invalid) cout << "x = " << x << endl; 该程序最终输出为x = 100。 可见,一旦将x初始化为*p,也就是使x指向a,再接下来即使将指针p指向b,也不能改 继续阅读 >>


王良 17/12/04 22:33:36
今天突然发现无法从本地git push到远程仓库了(然而事实是网有点卡,github官网没更新过来,然而……ssh-key已经删了….),所以又重新添加ssh-key。 ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub 将显示的内容粘贴到github的ssh-key里。 却发现并不能用,一直显示: sign_and_send_pubkey: signing failed: agent refused operation Permission denied (publickey). fatal: Could not read from remote repository. 所以,又删掉ssh-key,重新添加了一次,还是没用。 在删掉.ssh仍没用,此时已经要抓狂了,只能请教度娘了。 rm -r ~/.ssh 终于找到了几篇博客: http://blog.csdn.net/laner415/article/details/52966890 h 继续阅读 >>


王良 17/11/21 22:46:45
本文将主要介绍const关键字的使用。 首先,说一下const是什么: const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。 然后,我们来看一下这四处声明: const int a = 1; //code1 const int *p = &a; //code2 int * const p = &a; //code3 const int * const p = &a; //code4 下面就具体说一下这四行代码的作用与区别。 code1最简单,即声明a初值为1,且为常量,其值不可更改; code2即将变量a的地址赋值给p,此时输出*p的值为1,而且若进行*p = 2会报错,也就意味着p所指向的值(a的值)是不可更改的; code3因为const修饰的变量是p,同code1,也就意味着p存储的值(变量a的地址,也就是p指向的地址)是不可更改的,若进行p = &b会报错; code4综合code2 code3即可得出结论,p指向的地 继续阅读 >>


王良 17/11/19 22:55:44
本文主要内容为C++下的输入输出函数以及for循环中的C++11新特性。 一、输入输出函数 1. cin cin 遇到 空格、回车、Tab结束输入, 且会将读到的空格、回车、Tab 丢弃,例: #include<iostream> using namespace std; int main(void) { char a[10]; cin >> a; cout << a << endl; //第一次输出 cin >> a; cout << a << endl; //第二次输出 return 0; } Test: 由图像可见,在输入时,若输入两串字符,即便程序需要输入两次,第二次读取不会再次手动从键盘输入,而是上次输入的空格后的内容成为第二次读入的字符串。类似于scanf。 2. cin.get() 1) cin.get()有三种 继续阅读 >>


王良 17/11/01 21:33:38
1. 一个线程实验的问题 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <ctype.h> #include <pthread.h> #define MAX_THREAD 3 /* 线程的个数 */ unsigned long long main_counter, counter[MAX_THREAD]; pthread_mutex_t mutex; void* thread_worker(void*); int main(int argc,char* argv[]) { int i, rtn, ch; pthread_t pthread_id[MAX_THREAD] = {0}; /* 存放线程id*/ for (i=0; i& 继续阅读 >>


王良 17/08/05 09:28:01