百练oj 2950 摘花生

注意题目有一个很重要的信息:依次找到剩下植株里花生最多的。题目测试数据有点问题,没有输入T。

是一道模拟题把。

题目地址:http://poj.pku.edu.cn/problem/2950/

#include 
#include
 
#include 
#include 
#include 
#include 
using namespace std;
 
int T, M, N, K;
#define MAX_NUM 60
int aField[MAX_NUM][MAX_NUM];
int main()
{
	scanf("%d", &T);
	while(T--)
	{
		scanf("%d%d%d", &M, &N, &K);
		for(int i = 1; i <= M; i++)
			for(int j = 1; j <= N; j++)
				scanf("%d", &aField[i][j]);
		int nCuri = 0, nCurj;
		int nTotalTime = 0;
		int nTotalPeanuts = 0;
		while(nTotalTime < K)
		{
			int maxi, maxj, max = 0;
			for(int i = 1; i <= M; i++)
				for(int j = 1; j <= N; j++)
					if(max < aField[i][j])
					{
						max = aField[i][j];
						maxi = i;
						maxj = j;
					}
			if(max == 0)
				break;
			//如果当前位置是在路上,
			//那么应该走到横坐标nCurj处,再进入花生地
			if(nCuri == 0)
				nCurj = maxj;
			if(nTotalTime + maxi + 1 + abs(maxi - nCuri) + abs(maxj - nCurj) <= K)
				//下一行加上走到新位置,以及摘花生的时间
			{
				nTotalTime += 1 + abs(maxi - nCuri) + abs(maxj - nCurj);
				nCuri = maxi;
				nCurj = maxj;
				nTotalPeanuts += aField[maxi][maxj];
				aField[maxi][maxj] = 0;
			}
			else
				break;
		}
		printf("%d\n", nTotalPeanuts);
	}
	return 0;
}

大学,什么才是大学?

每天在图书馆,看到周围的人不是玩校内,聊QQ,就是看电影,玩魔兽争霸,劲舞团。。。好吧,我承认我也玩过校内,聊QQ,但是,我只是不明白,有的人为何要一直玩,至于吗?

我每次从图书馆出去上厕所,经过用电脑的同学们旁边,似乎都在学习,再一看电脑上,嘿好家伙,校内还在那屏幕上摆着呢。

最近,我迷恋上了ACM,那些题目,那种思想,让我感受到了算法,数学的魅力,我宁愿天天做那些题。那不是痛苦,是享受,我觉得大学的时间根本就不够,我每晚学到12点1点还是觉得少,为什么他们那么多的时间呢?

百练2799 浮点数格式

题目地址:http://poj.pku.edu.cn/problem/2799/

个人感觉这道题比较雷人,咋一看以为是需要把所有浮点数排列,后来在一个朋友的指点下才知道“排列”是指把浮点数后移一定格数使每个浮点数的小数点同一列。

//ID:百练2799
//Name:Tanky_Woo
//网站:C++奋斗乐园|C++论坛|算法论坛|ACM/ICPC论坛
//地址:http://www.cppleyuan.com/
//个人主页:www.wutianqi.com
//豆瓣小组:http://www.douban.com/group/cppleyuan/
//QQ:493841534/17611904
//QQ群:C++奋斗乐园①群:19333724(满) ②群:23840480
//③群:17314377 ④群:23829384
//转载请写上本帖链接和“C++奋斗乐园|C++论坛|算法论坛|ACM/ICPC论坛”
#include
#include
 
#include
#include
#include
#include
using namespace std;
 
int search_point_pos(char p[])
{
	int i , len = strlen(p);
	for(i = 0; i < len; i++)
		if(p[i] == '.')
			return i;
}
 
int main()
{
	int nCases;
	scanf("%d", &nCases);
	char float_point[10000][51];
	int i, max_point_pos = 0;
	for(i = 0; i < nCases; i++)
	{
		scanf("%s", float_point[i]);
		if(search_point_pos(float_point[i]) > max_point_pos)
			max_point_pos =
			search_point_pos(float_point[i]);
	}
 
	for(i = 0; i < nCases; i++)
	{
		int left =
			max_point_pos - search_point_pos(float_point[i]);
		for(int j = 0; j < left; j++)
			putchar(' ');
		printf("%s\n", float_point[i]);
	}
	return 0;
}