月考简要题解

模拟赛简要题解

一下题目均可在loj上找到

10178. 「一本通 5.5 例 4」旅行问题

简单题,将n扩大到2 * n,单调队列即可,注意正反向.

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=2000005;
ll sum[N];
int p[N],d[N],que[N],ok[N];
int n;

inline int read() {
    int x = 0,f = 1;char c = getchar();
    while(c < '0' || c > '9') {if(c == '-')f = -1;c = getchar();}
    while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}
    return x * f;
}
void DP1()
{
    int q1 = 1,q2 = 0;
    for (int i = 1; i <= n; ++ i){
        while (q1 <= q2 && sum[que[q2]] >= sum[i]) -- q2;
        que[++ q2]=i;
    }
    for (int i = n + 1; i <= n * 2; ++ i){
        while (q1 <= q2 && sum[que[q2]] >= sum[i]) -- q2;
        que[++ q2] = i;
        while (q1 <= q2 && que[q1] <= i - n) ++ q1;
        if (sum[que[q1]] >= sum[i - n]) ok[i-n] = 1;
    }
}
void DP2()
{
    int q1 = 1,q2 = 0;
    for (int i = n * 2; i > n; -- i){
        while (q1 <= q2 && sum[que[q2]] >= sum[i]) -- q2;
        que[++ q2] = i;
    }
    for (int i = n; i; -- i){
        while (q1 <= q2 && sum[que[q2]] >= sum[i]) -- q2;
        que[++ q2] = i;
        while (q1 <= q2 && que[q1] >= i + n) ++ q1;
        if (sum[que[q1]] >= sum[i + n]) ok[i] = 1;
    }
}
int main()
{
    n = read();
    for(int i = 1;i <= n;++ i) {
        p[i + n] = p[i] = read(),d[i + n] = d[i] = read();
         sum[i] = sum[i - 1] + p[i - 1] - d[i - 1];
    }
    for(int i = n + 1;i <= 2 * n;++ i)
        sum[i] = sum[i - 1] + p[i - 1] - d[i - 1];
    DP1();
    for(int i = n * 2 ;i; -- i)
        sum[i] = sum[i + 1] + p[i + 1] - d[i];
    DP2();
    for(int i = 1;i <= n;++ i)
        ok[i] ? puts("TAK") : puts("NIE");
    return 0;
}  

10078. 「一本通 3.2 练习 4」新年好

简单题,spfa跑六边最短路,全排列枚举即可.

#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
const int maxN = 5e4 + 7;
const int maxM = 1e5 + 7;
using namespace std;

int ke_dis[maxN][7];
queue <int>q;
bool vis[maxN];
int dis[maxN];

int Q[7],n,m; 

struct Node {
    int v,nex,w;
}Map[maxM << 1];
int head[maxN],num;

void add_Node(int u,int v,int w) {
    Map[++ num] = (Node) {v,head[u],w};
    head[u] = num;
    return ;
}

inline int read() {
    int x = 0,f = 1;char c = getchar();
    while(c < '0' || c > '9') {if(c == '-')f = -1;c = getchar();}
    while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}
    return x * f;
}

void spfa(int beg,int bh) {
    memset(dis,0x3f,sizeof(dis));
    dis[beg] = 0;
    q.push(beg);
    vis[beg] = true;
    while(!q.empty()) {
        int p = q.front();q.pop();vis[p] = false;
        for(int i = head[p];i;i = Map[i].nex) {
            int v = Map[i].v;
            if(dis[v] > dis[p] + Map[i].w) {
                dis[v] = dis[p] + Map[i].w ;
                if(!vis[v]) {
                    q.push(v);
                    vis[v] = true;
                }
            }
        }
    }
    for(int i = 1;i <= n;++ i)
        ke_dis[i][bh] = dis[i];
    return;
}

long long ans;
bool is_ch[7];
int ch[7];//五个亲戚走的顺序 , 只是编号 Q[编号] 是车站的编号
//特殊的Q[0] = 1 亲戚应该为1  

void work() {
    long long sum = 0;
    for(int i = 1;i <= 5;++ i) {
        sum += (long long) ke_dis[Q[ch[i - 1]]][ch[i]];
    }
    ans = min(ans,sum);
} 

void dfs(int tot) {
    if(tot == 6) work();
    for(int i = 1;i <= 5;++ i) {
        if(!is_ch[i]) {
            ch[tot] = i;is_ch[i] = true;
            dfs(tot + 1);
            is_ch[i] = false;
        }
    }
}

int main() {
    n = read();m = read();
    Q[0] = 1;
    for(int i = 1;i <= 5;++ i)
        Q[i] = read();
    for(int i = 1,u,v,w;i <= m;++ i) {
        u = read();v = read();w = read();
        add_Node(u,v,w);
        add_Node(v,u,w);
    }
    for(int i = 0;i <= 5;++ i)
        spfa(Q[i],i);
    ans = 1e12;
    dfs(1);
    printf("%lld", ans);
    return 0;
}

#10220. 「一本通 6.5 例 2」Fibonacci 第 n 项

最简单的题目.
套一个矩阵乘法即可.

#include <iostream>
#include <cstring>
#include <cstdio>
#define ll long long
using namespace std;

struct Node {
    ll w[4][4];
    Node() {
        memset(w,0,sizeof(w));
    }
};
ll n,m;

Node mul(Node a,Node b) {
    Node c;
    for(ll i = 1;i <= 2;++ i) {
        for(ll j = 1;j <= 2;++ j) {
            for(ll k = 1;k <= 2;++ k) {
                c.w[i][j] = ( c.w[i][j] + a.w[i][k] * b.w[k][j] ) % m;
            }
        }
    }
    return c;
}

void fast_pow(ll b) {
    Node a,ans;
    a.w[1][1] = a.w[1][2] = a.w[2][1] = 1;
    ans.w[1][1] = ans.w[2][2] = 1;
    for(;b;b >>= 1,a = mul(a,a) ) {
        if(b & 1) ans = mul(ans,a);
    }
    Node tmp;
    tmp.w[1][1] = tmp.w[1][2] = 1;
    ans = mul(tmp,ans);
    printf("%lld", ans.w[1][1]);
    return ;
}

int main() {
    scanf("%lld%lld",&n,&m);
    if(n == 1) {puts("1");return 0;}
    if(n == 2) {puts("1");return 0;}
    fast_pow(n - 2);
    return 0;
}

考试收获

题目一定要读好,读准.
不然像这次, \(300 -> 220\)
暴力一定要打.
不然\(250\)分的暴力.
提高自己的码力和代码查错水平
现在,Gzy我现在要开始认真了呢.

原文地址:https://www.cnblogs.com/tpgzy/p/9768574.html

时间: 2024-11-05 18:48:22

月考简要题解的相关文章

第十二天-月考

今天讲解月考试卷,虽然我因为学校自身有课没有参考,但是这老师讲解的过程中,我意识到一个问题,来到达内,这里不再是一个班级的比赛,而是全国性的比赛,全国有那么多全日制参考的学生,向他们看齐,有本事进前一百就很不错了.这里的学习氛围真的很好,周六,全班都在不停的敲代码敲代码,而且通过试卷我已经把之前学过的基础知识完全消化了,学习不在于多,而在于精,今天算是领悟到这个道理了.接下来,就是自己该静下心来好好总结了.我相信三个月后,我会自信满满的.晚上犒劳自己,今天辛苦了,老九门,终于看到最新一集了.哈哈

在双语的第二次月考

考试对于我来说,其实并算不得了什么了,但如今转身做为一名教师,尤其是当一名班主任,对于成绩更是委看中,但我知道成绩好与不好,对于目前的我来说,并不会有什么好处,只不过名誉好与不好之听罢了.但对于自己带一个班,就显得那么重要了.他(她)追求的不只是钱,其实最主要的还是什么晋级的事.记得每次考试过后,他(她)都争得的不可开叫,而我只是作为一名旁观者,静静的听着,看着.有时在想为什么人人都为了那点小利益,而让大家都过的不开心.如今的教学事业已不是当年我所上学的那样了.太多太多的不近情意,这个社会真的在

我看西电通院月考——学生应该做点什么?

如果你没有耐心看完整篇文章,你可以直接跳到最后一点,看看对于类似通院月考这样让你很郁闷的抓学风政策,我所认为的学生应该怎么做,也是我主要想传达的想法. 1.大学月考政策介绍 前段时间听说西电通院一些年级开始实行月考制度,每门课都要月考:一次考试低于50就算挂科:月考均分低于60也算挂科:月考时间不固定,随机进行通知.也听说指纹签到机的使用,还有不遵守校规,直接宿舍断电断水的事,具体没有去做考证.我不知道这个月考制度后来具体是怎么实施的,实施是否严格,又是否有效. 对于这项政策,有人举双手表示赞同

藁城一中2010-2011学年第一学期第二次月考

一.选择题(每小题只有一个答案最符合题意,将正确答案选出来,将其字母涂在答题卡上,每小题1分,共70分) 1.列地质作用中,属于内力作用的是 A.剥蚀作用       B.沉积作用       C.风化作用         D.变质作用 致学教育课外辅导,提分快效果好! 2."背斜成山,向斜成谷"的主要地质作用是 A.内力作用                        B.搬运作用                     C.侵蚀作用        D.沉积作用 3.内力作用的能量

因第三次月考而引起的

这么久没有考试了,一连翘掉了期末.入学.第一次月考.期中考试.本来这一次的第三次月考是要求全组参加的,但是,俗话说:“计划赶不上变化”.确实如此,在明天就要第三次月考的晚自习前,我们还在搞大扫除,忽然,远远望见教练的身影,他过来说:“联赛400分以上的不要参加月考,从明天开始准备冬令营.”我们这些人(4个)真是一脸茫然的样子.马上又去找了教练,他说年级组要求我们参加月考因我们不能参加冬令营.不过教练还是说会去和年级组谈一谈. 不知怎么办的我们遭遇了这当头的一棒,马上,准备去找年级组长,我们的理由

洛谷 P4256 公主の#19准备月考

题目背景 公主在玩完游戏后,也要月考了.(就算是公主也要月考啊QWQ) 题目描述 公主的文综太差了,全校排名1100+(全校就1100多人),她分析了好久,发现她如果把所有时间放在选择题上,得分会比较好一点. 文综题目共有n个,编号从1到n 公主给每个题目算出来了一个预估值Ai,她认为,一段连续题目的答案会在它们的预估值的gcd和lcm之间:有时候她的想法不同了,一些题目的预估值会改变:有时候,会出现多选题,多选题的答案数量就是一段连续题目答案的预估值的公约数的个数. 具体来说,对于一个数列,有

AGC025简要题解

AGC025简要题解 B RGB Coloring 一道简单题,枚举即可. C Interval Game 考虑可以进行的操作只有两种,即左拉和右拉,连续进行两次相同的操作是没有用的. 左拉时肯定会选择右端点尽量小的,右拉选择左端点尽量大的,所以排序之后贪心即可. D Choosing Points 首先证明对于所有\(d\),假设让两个不能同时选的点之间连一条边,那么结果是一张二分图. \(d\)是奇数可以黑白染色,\(d\)是偶数的时候,显然连边的两点在同一个颜色内.那么我们可以只考虑这个颜

csu-2018年11月月赛Round2-div2题解

csu-2018年11月月赛Round2-div2题解 A(2193):昆虫繁殖 Description 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强.每对成虫过x个月产y对卵,每对卵要过两个月长成成虫.假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵),问过Z个月以后,共有成虫多少对?0=<X<=20,1<=Y<=20,X=<Z<=50 Input 单组数据 x,y,z的数值 Output 过Z个月以后,共有成虫对

csu-2018年11月月赛Round2-div1题解

csu-2018年11月月赛Round2-div1题解 A(2191):Wells的积木游戏 Description Wells有一堆N个积木,标号1~N,每个标号只出现一次 由于Wells是手残党,所以每次只能取出一块积木放在积木顶层 现在Wells想知道至少需要操作几次可以把积木堆成从顶至底标号升序 不论什么都很菜的Wells显然不知道怎么做 所以作为人生赢家的你义不容辞的决定帮助可怜的Wells Input 第一行一个正整数N 接下来N行,从顶至底描述每块积木的标号 Output 输出一行