• 10.21上午考试


    最近考试又开始下滑了。

    70+100+35=205,rank6

    反思:T1边界条件,卡了10分。

    T3,没有注意到3的n/2正解,打了2的n,卡掉了。

    以后注意积累吧

    主要是看RP

    最近好像是脑洞不够用了

    绩效等级

    ( grade.*)

    问题描述:

    在 CZYZ 每个老师都要算绩效,当然,绩效跟完成的任务数量 w 有关,可以表示为以下公式: s = 10000 - (100 -w)^2。现在呢,校长想算出所有人的绩效,看看其中的众数是多少,如果有多个众数则分别输出如果不止一种数,所有数出现的频率都一样则不存在众数,输出“Bad Mushroom”(不含引号)。

    众数: 是一组数据中出现次数最多的数值。

    问题输入:

    第一行一个整数 T,表示有 T 组数据。

    每组数据第一行是一个整数 N,表示有 N 个人;第二行有 N 个整数用空格隔开,表示每个人完成的任务数量 wi。

    问题输出:

    对于每组数据:首先输出一行“Case #i:”, i 表示组数(格式见样例),然后输出一行若干个整数(之间用 1 个空格隔开),行末无多余空格。如不存在众数,输出“Bad Mushroom”(不含引号)。

    样例输入:

    3
    6
    100 100 100 99 98 101
    6
    100 100 100 99 99 101
    6
    100 100 98 99 99 97
    

    样例输出:

    Case #1:
    10000
    Case #2:
    Bad Mushroom
    Case #3:
    9999 10000
    

    数据规模:

    对 30%的数据满足: 0 < N <= 1000。

    对 100%的数据满足: 0 < N <= 1000000, 0 < wi < 200, 0 < T <= 5。

    题解:

    摸你题,要用桶排序

    如果众数数量等于总数那么就是Bad了

    注意!N=1时并不是Bad,这被卡了10分。

    舞会配对

    ( ples.*)

    问题描述:

    在 NOI2015 闭幕式舞会上有 N 个男孩和 N 个女孩,每个人都量过了自己的身高。每个男孩只跟女孩跳舞,并且女孩也只跟男孩跳舞。每个人最多只有一个舞伴。男孩或者想和比自己高的女孩跳舞,或者想和比自己低的女孩跳舞,同样的,女孩也是或者想和比自己高的男孩跳舞,或者想和自己低的男孩跳舞。

    你能决定最多有多少对能在一起跳舞么?

    问题输入:

    第一行是一个正整数 N(1 <= N <= 100000),表示男女的人数。

    第二行包括 N 个绝对值在 1500 到 2500 的整数,每个整数的绝对值表示每个男孩的身高。如果是一个正整数,表示这个男的喜欢和比他高的女孩跳舞,如果是负整数,就表示这个男的喜欢和比他低的女孩跳舞。

    第三行包括 N 个整数,每个整数的绝对值表示相应女孩的身高。同样的,如果是正整数的话,表示这个女孩喜欢和比她高的男孩跳舞,如果是负整数的话,表示这个女孩喜欢和比她低的男孩跳舞。

    问题输出:

    只有一行一个整数,表示最多的可以搭配的对数。

    输入样例 1:

    1
    -1800
    1800
    

    输出样例 1:

    0
    

    输入样例 2:

    1
    1700
    -1800
    

    输出样例 2:

    1
    

    输入样例 3:

    2
    -1800 -2200
    1900 1700
    

    输出样例 3:

    2
    

    数据规模:

    对于 50%的数据满足: N <= 5000;

    对于 100%的数据满足: 1 <= N <= 100000。

    题解:

    一个喜欢高得女生的男生,一定和一个喜欢低的男生的女生跳舞

    所以把所有男生女生分为两拨,然后贪心选就行

    非常简单的题呢

    平衡的子集

    (subset.*)

    问题描述:

    JSOI2015 夏令营期间,营委会计划举办一次拔河比赛,以庆祝我们敬爱的李老爷爷八十大寿。为了使得比赛最激烈,我们希望将参加比赛的营员按照力气值之和分成尽可能平衡的两组。

    现在假设夏令营有 N 个人,每个人的力气为 M(i)。

    请大家计算:要使分成的两组力气之和完全相等,有多少种分法?

    问题输入:

    第一行一个整数 N,表示人数。

    接下来 N 行,每行一个整数 M(i)。

    问题输出:

    输出一行一个整数,表示一共有多少种选法。

    输入样例:

    4 1 2 3 4
    

    输出样例:

    3
    

    样例解释:

    对于这 4 头奶牛,有以下 3 种选法:

    第一种选出{1,2,3},分成{1,2}和{3}两组;

    第二种选出{1,3,4},分成{1,3}和{4}两组;

    第三种选出{1,2,3,4},分成{1,4}和{2,3}两组。

    数据规模:

    对于 40%的数据满足: 1 <= M(i) <= 1000;

    对于 100%的数据满足: 2 <= N <= 20, 1 <= M(i) <= 100000000。

    题解:

    这题题面有毒,问的是有多少种选择人的方法,而不是有多少种分拨的方法。

    直接搜索的复杂度是3的N次方,考虑双向搜索。

    存储两部分元素值的差,存到两个vector中(记录选择情况和状态)

    然后sort+双指针

    具体看代码吧,这里站一下代码

    复杂度上界是(O({3^{frac n 2}}^2)),但实际是不可能达到的

    #include <bits/stdc++.h>
    using namespace std;
    
    struct fuck
    {
    	int a[10], n;
    	map<int, int> res;
    	void search(int pos, int tot)
    	{
    		if (pos == n)
    		{
    			res[tot]++;
    			return;
    		}
    		search(pos + 1, tot);
    		search(pos + 1, tot + a[pos]);
    		search(pos + 1, tot - a[pos]);
    	}
    } l, r;
    
    int n, a[20], maxb, ans = 0;
    
    int main()
    {
    	freopen("subset.in", "r", stdin);
    	freopen("subset.out", "w", stdout);
    	scanf("%d", &n);
    	for (int i = 0; i < n; i++)
    		scanf("%d", &a[i]);
    	int mid = n / 2;
    	l.n = mid;
    	r.n = n - mid;
    	for (int i = 0; i < mid; i++)
    		l.a[i] = a[i];
    	for (int i = mid; i < n; i++)
    		r.a[i - mid] = a[i];
    	l.search(0, 0);
    	r.search(0, 0);
    	long long ans = 0;
    	for (map<int, int>::iterator i = l.res.begin(); i != l.res.end(); i++)
    	{
    		int fuck = (*i).first;
    		ans += l.res[fuck] * r.res[-fuck];
    	}
    	printf("%lld
    ", (ans - 1) / 2);
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    
  • 相关阅读:
    如果一切需要重学,2014年应该学哪些技术?
    LINUX 更新
    LINUX学习
    判断设备是笔记本,还是台式机
    DUILIB 实现微信气泡聊天效果
    OC学习1
    DUILIB 背景贴图
    DUILIB CDialogBuilder 使用问题
    my english dream
    oracle 函数
  • 原文地址:https://www.cnblogs.com/oier/p/9826327.html
Copyright © 2020-2023  润新知