Noip 2016

Day1

    思路:

    大致是 把一个环拆成链, 找某个人无非是向右找或向左找(即对当前点加或减)

    若加上要移动的位置后坐标大于总人数, 就把当前坐标减去总人数,

    若减去要移动的位置后坐标小于0, 就把当前坐标加上总人数

    另外要注意的就是每个小人的朝向问题, 这个也很好解决。

    通过观察不难发现,小人面朝里, 向右移动的话, 就是加, 向左为减。

             小人面朝外则反之。

    最后输出当前坐标小人的名称。

    

#include <iostream>
#include <cstdio>
#include <cstring>
#define Max 100003
using namespace std;
int N, M;
struct node
{
    int towards;
    string name;
}people [Max];
int main()
{
    scanf ("%d%d", &N, &M);
    int f;
    string a;
    for (int i = 1; i <= N; i++)
    {
        scanf ("%d", &people [i].towards);
        cin >> people [i].name;
    }
    int x, y;
    int now = 1;
    for (int i = 1; i <= M; i++)
    {
        scanf ("%d%d", &x, &y);
        if (people [now].towards == 0 && x == 0)
        {
            now -= y;
            if (now <= 0)
                now = N + now;
        }
        else if (people [now].towards == 0 && x == 1)
        {
            now += y;
            if (now > N)
                now = now - N;
        }
        else if (people [now].towards == 1 && x == 0)
        {
            now += y;
            if (now > N)
                now = now - N;
        }
        else if (people [now].towards == 1 && x == 1)
        {
            now -= y;
            if (now <= 0)
                now = N + now;
        }
    }
    cout << people [now].name;
    return 0;
}

    

第二题 天天爱跑步

  不会, 当时做时就是骗的分

  由数据范围可知:  

  前两个点所有玩家的起点等于终点, 那么就好办了。

  扫一遍所有的点, 如果有玩家的起点在这个点上(因为起点与终点相同 所以只需要判起点就好了), 那么这个观察员可观察的人数加1。如此, 最后输出即可

  第三和第四个点是 观察员的观测时间都是0,

  那么只要扫一遍所有玩家的起点,把起点上的观测员可观察到的人数加一即可。

  但是 !!当时考试时我就是这么打的, 结果一分没得。(原因不明)

  (把自己的答案与标准答案比了半天也没发现哪有不同)。

第三题 换教室

  不会 当时打的是暴力

  当时思路就是 先跑一边floyed 找处所有点的最短路

  然后搜索可能的情况(类似于全排列),挨个算, 算完后刷新最小值

  但是还是写崩了, 枚举可能的情况那一步怎么也打不对。

  无奈想放弃治疗时, 突然发现有些数据是m = 0 的, 即只需跑一边裸的floyed。

  找出最短路即可, 结果floyed 初始化时忘记把对角线赋值为零(即当 i = j的情况)。

  于是GG。 0分

Day2

第一题 组合数

思路:

  

  当时考场上时, 由于未接触过组合数什么的

  所以做此题时一头扎进他给的公式中出不来了

  想了很久, 大多是围绕直接算阶乘的方法。最后无果, 只能打了个30%数据的表

  骗了30.。

  AC做法。。

  动态规划, 恩, 好吧。。一点也没想到

  大体上是 运用递推, 推出

  公式为 number[i][j] = number[i-1][j-1]+number[i-1][j]  注意还要mod K, 反正都是要求的是K的倍数,mod K一举两得

  因为可能这个数会很大。。。。爆long long

  如果mod K 后等于0, 那么说明符合题意 i的计数器加一

  最后再加到 答案dp[i][j]中去 , dp[i][j] = dp[i-1][j] + 计数器

  最后再注意判断一下 m 和 n 的关系 这个题就OK了。。

#include <iostream>
#include <cstdio>
#include <cstring>
#define Max 2000
using namespace std;
long long number [Max][Max]; // 组合数 。number [i][j]表示i个东西分成 j份的方案数
long long dp [Max][Max]; // dp[i][j] 表示的是i个东西分成j份中是k的倍数 的方案数
long long Total [Max];
inline void read (int &now)
{
    char word = getchar ();
    now = 0;
    while (word > ‘9‘ || word < ‘0‘)
        word = getchar ();
    while (word <= ‘9‘ && word >= ‘0‘)
    {
        now = now * 10 + (int)(word - ‘0‘);
        word = getchar ();
    }
}
int main()
{int T, K;
    read (T);
    read (K);
    number [0][0] = 1; //初始化
    for (int i = 1; i <= Max; i++)  //先把所有的预处理出来, 否则 每次都查询会超时。。
    {
        number [i][0] = 1; //初始化 i个物品分0个的方案数为 1
        for (int j = 1; j <= i; j++)
        {
            number [i][j] = (number [i - 1][j - 1] + number [i - 1][j]) % K; // 递推求组合数  number[i][j]是由上一个物品选或不选递推而来
            if (number [i][j] == 0)  //如果能被K整除  计数器加一
                Total [i]++;
            dp [i][j] = dp [i - 1][j] + Total [i];  //i个物品分j份 的方案数满足条件的 是上一个状态加上这一个状态的总数得出
            if (i == j) // 注意判断一下i == j 即i个物品分i份的情况 。
                dp [i][j] = Total [i] + dp [i - 1][j - 1];
        }
    }
    while (T--)
    {
        int n, m;
        read (n);
        read (m);
        cout << dp [n][m > n ? m = n : m] << endl; //因为 0 <= m <= min (m, n), 所以要判断一下
    }
    return 0;
}

第二题 蚯蚓

时间: 2024-10-12 11:49:36

Noip 2016的相关文章

NOIP 2016 迟来的满贯

17-03-22,雨 17-03-22,一个特别重要的日子 在这一天,本蒻攻克了NOIP 2016最难的一题,D1T2--天天爱跑步 实现了NOIP 2016的AK! YAYAYAYAYAYAY 自然遭到了众巨神的膜拜--他们不屑于做这种弱菜才做的题目--RP又掉了 17-03-22于福州

noip 2016 天天爱跑步

描述 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一棵包含n个结点和n - 1条边的树,每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从1到n的连续正整数. 现在有m个玩家,第i个玩家的起点为Si,终点为Ti.每天打卡任务开始时,所有玩家 在第0秒 同时从 自己的起点 出发,以 每秒跑一条边 的速度,不间断地沿着最短路径向着 自己的终点 跑去,

NOIp 2016 总结

NOIp 2016 总结 -----YJSheep Day 0 对于考前的前一天,晚自习在复习图论的最短路和生成树,加深了图的理解.睡得比较早,养足精力明日再战. Day 1 拿到题目,先过一边,题目都很长,心中有些忐忑. T1是一道模拟,关键是对位置进行操作,题目比较水,,但我好像没处理好当取模为0的情况,因为0与等价,但输出的时候有特殊处理,估计会wa几个点.太不应该了. T2是一道图论的题目,还好昨晚复习了,有点基础.要想做出来显然不可能,我选择用深搜来遍历每条路,估计不是爆栈就是超时,但

模拟(玩具谜题NOIP 2016 提高组 Day 1 第一题vijos2003)

描述 小南有一套可爱的玩具小人,它们各有不同的职业. 有一天,这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉小南一个谜题:“眼镜藏在我左数第3个玩具小人的右数第1个玩 具小人的左数第2个玩具小人那里.” 小南发现,这个谜题中玩具小人的朝向非常关键,因为朝内和朝外的玩具小人的左右方向是相反的:面朝圈内的玩具小人,它的左边是顺时针方向,右边是逆时针方向:而面向圈外的玩具小人,它的左边是逆时针方向,右边是顺时针方向. 小

Noip 2016 Day 1 &amp; Day 2

Day 1 >>> T1 >> 水题直接模拟AC: 考察三个知识点:1.你能不能编程 2.你会不会取模 3.你脑子抽不抽 然而第一次评测还是90,因为当模运算时 " end == 0 " 时需要将 end 改成 n: 代码: 1 #include <bits/stdc++.h> 2 3 const int N = 1e5 + 5 ; 4 5 int n , k , x , y , end ; 6 7 struct node { 8 int id

noip 2016 提高组试题看法

前几天写的那个纯属搞笑.(额,好吧,其实这个也不怎么正经) 就先说说day2吧: T1:这个东西应该叫做数论吧. 然而我一看到就照着样例在纸上推了大半天(然而还是没有看出来这东西是个杨辉三角) 然后就想干脆先把n≤25的拿了再说(这个爆不了long long) 然后就硬套用那个组合数公式. 再然后,就只拿了35分. T2:我勒个去. 这个东西应该用堆来优化的吧. 然而并不会堆. 然后就切一个遍历一遍把两端都再加进去(虽然我知道这个时间复杂度估计连20都拿不了). 一个估计是正解的东西: 思考一下

Noip 2016 Day1 题解

老师让我们刷历年真题, 然后漫不经心的说了一句:“你们就先做做noip2016 day1 吧” ...... 我还能说什么,,,,,老师你这是明摆着伤害我们啊2333333333 预计分数:100+25+24 实际分数:100+25+12 T1:玩具谜题 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉小南一个谜題: “眼镜藏在我左数第3个玩具小

noip 2016 提高组总结(不是题解)

小弱鸡杨树辰是第一次参加像noip这样的高大上的比赛,于是他非常,非常,非常激动. 当他第二天考完试后,他正在yy自己的分数:day1T1应该是a掉了,T2写了个30分的暴力,T3也是个40分的暴力,这第一天就能拿到170了,他的心情非常开心,非常非常开心:day2T1应该是50分,T2么,随便拿个25好了,至于T3,呵呵呵呵呵呵呵,爆零就好~我带你去看天荒地老~,咳咳: 这时,一位记者瞄上了他; 记者:"你好这位同学,可以谈一下本次noip的经历么?" ysc:"我么?我可

[NOIp 2016]愤怒的小鸟

Description Input Output Sample Input 22 01.00 3.003.00 3.005 21.00 5.002.00 8.003.00 9.004.00 8.005.00 5.00 Sample Output 11 Sample Explanation HINT 题解 暴力做法: 1.因为三点可以确定一条抛物线,又必过原点,那么只需要再找两个点就能确定一条抛物线; 2.枚举点对,求出抛物线方程,注意两点的$x$坐标不能相等,抛物线的二次项系数必须小于$0$;

noip 2016 玩具谜题

题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉小南一个谜題: “眼镜藏在我左数第3个玩具小人的右数第1个玩具小人的左数第2个玩具小人那里. ” 小南发现, 这个谜题中玩具小人的朝向非常关键, 因为朝内和朝外的玩具小人的左右方向是相反的: 面朝圈内的玩具小人, 它的左边是顺时针方向, 右边是逆时针方向; 而面向圈外的玩具小人, 它的左边是逆时针方