zoukankan      html  css  js  c++  java
  • CSUOJ 1900 锋芒不露

    Description

    小闪最近迷上了二刀流——不过他耍的其实是剑——新买了一个宝库用来专门存放自己收集的双剑。一对剑有两把,分只能左手用的和只能右手用的,各自有一个攻击力数值。虽然一对剑在小闪刚拿到时是一对,不过其实可以认为它们是独立的两把剑。一对剑的攻击力是左右两把剑的攻击力之和,小闪可以自由地搭配左右剑来练习二刀流。每次小闪得到一对新的双剑,他都可以去更新一次自己的双剑宝库,重新给每把剑配对。小闪需要自己给每一把剑配对,然后他的智能宝库会提供宝库中攻击力最高的一对剑来给小闪练习;不过小闪其实是一个很低调的人,不喜欢锋芒毕露,希望自己练习时的双剑攻击力尽可能小——虽然不知道怎么改变宝库,但是他可以改变双剑的搭配。每次新得到一对剑,更新完宝库之后,小闪练习时用的剑可能就会发生变化。请你求出每次更新宝库后小闪练习二刀流时的双剑攻击力。

    Input

    输入包含不超过10组数据。对于每组数据,第一行一个整数N(1<=N<=100000),表示小闪前后共收集到了N对双剑;接下来N行,每行包含两个整数A和B(1<=A,B<=100),分别表示每次小闪收集到的一对剑的左手用剑和右手用剑的攻击力数值。每组数据之后会有一个空行。输入以一行一个整数0结束。

    Output

    对于每组数据,输出N行,每行一个整数,表示每次更新后小闪练习二刀流时的双剑攻击力值。相邻两组数据之间输出一个空行。

    Sample Input

    3
    2 8
    3 1
    1 4
    
    3
    1 1
    2 2
    3 3
    
    0

    Sample Output

    10
    10
    9
    
    2
    3
    4

    Hint

    开始看到这题,sort一下把最大和最小加起来判断一下,结果TLE

    然后在输入的时候判断最大最小,TLE
    仔细想了想就算不TLE还是会wa

    然后看到剑的能量最大就100,就想到用数组记录各能量的剑的个数,输入时不断更新就可以了

    #include<iostream>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    int l[105], r[105];
    int main()
    {
    	int T,a,b;
    	while (~scanf("%d", &T))
    	{
    		if (!T)
    			break;
    		memset(l, 0, sizeof(l));
    		memset(r, 0, sizeof(r));
    		int maxx=100,minn=0;
    		for (int i = 1; i <= T; i++)
    		{
    			scanf("%d%d", &a, &b);
    			l[a]++, r[b]++;
    			if (maxx>a)maxx = a;
    			if (minn < b)minn = b;
    			int m = maxx, n = minn,ma=0;
    			int p = l[maxx], q = r[minn];
    			int cnt = 0;
    			while (cnt != i)
    			{
    				if (p == 0)
    				{
    					p = l[++m];
    					continue;
    				}
    				if (q == 0)
    				{
    					q = r[--n];
    					continue;
    				}
    				if (m + n > ma)ma = m + n;
    				if (p == q)
    				{
    					cnt += p; m++; n--;
    					p = l[m]; q = r[n];
    				}
    				else if (p < q)
    				{
    					q -= p;
    					cnt += p;
    					p = l[++m];
    				}
    				else if (p>q)
    				{
    					p -= q;
    					cnt += q;
    					q = r[--n];
    				}
    			}
    			printf("%d
    ", ma);
    		}
    		printf("
    ");
    	}
    }
    /**********************************************************************
    	Problem: 1900
    	User: leo6033
    	Language: C++
    	Result: AC
    	Time:444 ms
    	Memory:2024 kb
    **********************************************************************/
    

  • 相关阅读:
    conan本地安装包
    Python PIL 怎么知道写入图片格式的kb大小
    怎么对C++枚举(不是类)里面的东西进行随机
    当双方Visual studio windows SDK不一样的时候的解决办法
    不小心使用vcpkg之后再使用conan,一直报链接错误
    关于obj文件的理解
    卸载VS2015之后,安装VS2017出错
    性状、生成器、闭包、OPcache【Modern PHP】
    docker容器修改hosts文件,重启失效问题解决
    微信公众号-模板消息通用接口封装
  • 原文地址:https://www.cnblogs.com/csu-lmw/p/9124434.html
Copyright © 2011-2022 走看看