CF 1138A

https://codeforces.com/problemset/problem/1138/A

题意:

一排寿司,有金枪鱼和鳗鱼两种,找到最大的连续序列,一半全是金枪鱼,另一半全是鳗鱼。

思路:

遍历一遍,整合成一个序列,代表每种寿司连续出现多少次;

然后找到相邻对中,较小数最大的那对。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <vector>
#include <algorithm>
using namespace std;
class status
{
public:
	int cnt;
	int _type;
public:
	void print_self(int i)
	{
		printf("[%d]: type = [%d], cnt = [%d]\n",i, _type, cnt);
	}
};
unsigned int sushi[100010];
int main()
{
	int cnt = 0;
	while(scanf("%d",&cnt)!=EOF)
	{
		// input	
		int ipt;

		memset(sushi,0,sizeof(sushi));
		for(int i=0; i<cnt; i++)
			scanf("%d",&sushi[i]);
		
		// calculate
		auto kind = sushi[0];
		int tmp_cnt = 1;
		vector<status> vec;

		for(int i=1; i<cnt;)
		{
			if(sushi[i] == kind)
			{
				tmp_cnt++;
				i++;
			}
			else
			{
				status p;
				p.cnt = tmp_cnt;
				p._type = kind;
				vec.push_back(p);
				tmp_cnt = 1;
				kind = sushi[i];
				i++;
			}
		}
		status p;
		p.cnt = tmp_cnt;
		p._type = kind;
		vec.push_back(p);
		int max_cnt = 0;
		auto vec_size = vec.size();
		
		if(vec_size == 1)
		{
			max_cnt = 0;
		}
		else if (vec_size == 2)	
		{
			max_cnt = 2 * min(vec[0].cnt, vec[1].cnt);
		}
		else
		{
			for(int i=0; i<vec_size; i++)
			{
				if(vec[i]._type != 1)
					continue;
				tmp_cnt = 0;
				if(i == 0)
				{
					tmp_cnt = 2 * min(vec[i].cnt, vec[i+1].cnt);
				}
				else if (i == vec_size-1)
				{
					tmp_cnt = 2 * min(vec[i].cnt, vec[i-1].cnt);
				}
				else
				{
					tmp_cnt = max(vec[i-1].cnt, vec[i+1].cnt);
					tmp_cnt = 2 * min(vec[i].cnt, tmp_cnt);
				}
				max_cnt = max(tmp_cnt, max_cnt);	
			}
		}
		

		// output
		printf("%d\n", max_cnt);

	}	
	return 0;
}

 

有这样的一组数据{"code":200,"msg":null,"data":[{"days":"03.18","cityCode":"530","cityName":"菏泽","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"597","numSl":"1057","avgZj":"700.62","avgSl":"1206.81"},{"days":"03.18","cityCode":"531","cityName":"济南","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"1160","numSl":"2283","avgZj":"700.62","avgSl":"1206.81"},{"days":"03.19","cityCode":"530","cityName":"菏泽","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"554","numSl":"1018","avgZj":"725.25","avgSl":"1195.69"},{"days":"03.19","cityCode":"531","cityName":"济南","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"1181","numSl":"2339","avgZj":"725.25","avgSl":"1195.69"},{"days":"03.20","cityCode":"530","cityName":"菏泽","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"611","numSl":"1084","avgZj":"762.88","avgSl":"1273.5"},{"days":"03.20","cityCode":"531","cityName":"济南","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"1215","numSl":"2363","avgZj":"762.88","avgSl":"1273.5"},{"days":"03.21","cityCode":"530","cityName":"菏泽","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"611","numSl":"1049","avgZj":"684.44","avgSl":"1224.25"},{"days":"03.21","cityCode":"531","cityName":"济南","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"1247","numSl":"1896","avgZj":"684.44","avgSl":"1224.25"},{"days":"03.22","cityCode":"530","cityName":"菏泽","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"579","numSl":"862","avgZj":"738.69","avgSl":"1027.88"},{"days":"03.22","cityCode":"531","cityName":"济南","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"1260","numSl":"1735","avgZj":"738.69","avgSl":"1027.88"},{"days":"03.23","cityCode":"530","cityName":"菏泽","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"555","numSl":"786","avgZj":"691.12","avgSl":"712.69"},{"days":"03.23","cityCode":"531","cityName":"济南","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"1069","numSl":"1128","avgZj":"691.12","avgSl":"712.69"},{"days":"03.24","cityCode":"530","cityName":"菏泽","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"631","numSl":"1151","avgZj":"705.31","avgSl":"1138.12"},{"days":"03.24","cityCode":"531","cityName":"济南","subCode":null,"subName":null,"gridCode":null,"gridName":null,"numZj":"1058","numSl":"1852","avgZj":"705.31","avgSl":"1138.12"}],"traceId":"1059d1a0747b4b8289c6ca1e1532cf1c"}我需要根据cityCode来返回四个集合,四个集合里面分别存numZj,numSl,avgZj,avgSl的值,具体需求就是每个日期下济南与菏泽的numZj,numSl,avgZj,avgSl的数量,用java
03-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值