Andryusha and Socks

本文介绍了一个关于袜子整理的问题,通过使用map数据结构记录每双袜子的状态来解决。问题描述为:一个人有n双混在一起的袜子,他依次取出袜子,如果能配对则放入衣柜,否则放到桌上,求桌面上最多有多少只袜子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接  http://codeforces.com/problemset/problem/780/A

A. Andryusha and Socks
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Andryusha is an orderly boy and likes to keep things in their place.

Today he faced a problem to put his socks in the wardrobe. He has n distinct pairs of socks which are initially in a bag. The pairs are numbered from 1 to n. Andryusha wants to put paired socks together and put them in the wardrobe. He takes the socks one by one from the bag, and for each sock he looks whether the pair of this sock has been already took out of the bag, or not. If not (that means the pair of this sock is still in the bag), he puts the current socks on the table in front of him. Otherwise, he puts both socks from the pair to the wardrobe.

Andryusha remembers the order in which he took the socks from the bag. Can you tell him what is the maximum number of socks that were on the table at the same time?

Input

The first line contains the single integer n (1 ≤ n ≤ 105) — the number of sock pairs.

The second line contains 2n integers x1, x2, ..., x2n (1 ≤ xi ≤ n), which describe the order in which Andryusha took the socks from the bag. More precisely, xi means that the i-th sock Andryusha took out was from pair xi.

It is guaranteed that Andryusha took exactly two socks of each pair.

Output

Print single integer — the maximum number of socks that were on the table at the same time.

Examples
input
1
1 1
output
1
input
3
2 1 1 3 2 3
output
2
题目大意:

一个人有n双袜子,放在包里面(但是这些袜子都是混在一起的,也就是说不配套的),他想把这些袜子整理在衣柜里面(同一双的放在一起)。所以他就从包里面一次拿一只,如果这只袜子和之前拿出来的是一套,就放在衣柜里面;如果和以前拿出来的都不配套,就放在桌子上面,就这样一次次的拿,直到拿完这n双袜子。题目问桌子上最多放几双袜子?并输出。

解题思路:

这道题就是简单的map的应用,不会做的应该是看不懂题意。题意懂了,代码就容易了。

代码:

#include<iostream>
#include<map>
using namespace std;
int main()
{
    int n,sum,max,s;//sum保存目前桌子上的袜子数目,max保存桌子上最大的袜子数目
    while(cin>>n)
    {
        sum=0;
        max=0;
        map<int,int>M;   //定义一个map容器
        for(int i=1;i<=2*n;i++)
        {
            cin>>s;
            M[s]++;
            if(M[s]==1)//如果目前这只袜子以前没有出现过,那么桌子上的咋子数目sum++
            {
                sum++;
                if(sum>max)//max始终保存最大数量的袜子的数目
                    max=sum;
            }
            else
                sum--;
        }
        cout<<max<<endl;
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值