8.24考试总结

前言

今天考试还是只有Rank5我很畏惧,感觉要被刷了...(绝望,对不起KingBenQi).其实这一套题目我硬盘里都有,只是今天忘记翻了..绝望.

T1

小奇挖矿
这道题目直接贪心就好了(可能是DP吧..)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define ll long long
#define re register
using namespace std;
inline int gi(){
    int f=1,sum=0;char ch=getchar();
    while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    return f*sum;
}
double k,c,w,cost[100010];int n,type[100010];
double max(double a,double b){
    return a>b?a:b;
}
int main(){
#ifndef ONLINE_JUDGE
    freopen("explo.in","r",stdin);
    freopen("explo.out","w",stdout);
#endif
    scanf("%d%lf%lf%lf",&n,&k,&c,&w);
    double ans=0;
    for(re int i=1;i<=n;i++){
        type[i]=gi();scanf("%lf",&cost[i]);
    }
    for(re int i=n;i>=1;i--){
        if(type[i]==1)ans=max(ans,ans*(1-0.01*k)+cost[i]*w);
        else ans=max(ans,ans*(1+0.01*c)-cost[i]*w);
    }
    printf("%.2lf\n",ans);
    return 0;
}

T2

小奇的数列
由于nzr运用一些玄学的暴力优化使得这道题目不需要平衡树就可以通过.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<iostream>
#define ll long long
#define re register
using namespace std;
inline ll gi(){
    ll f=1,sum=0;char ch=getchar();
    while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    return f*sum;
}
ll n,q,a[500010],sum[500010];
bool bj[510];
int main(){
#ifndef ONLINE_JUDGE
    freopen("seq.in","r",stdin);
    freopen("seq.out","w",stdout);
#endif
    n=gi(),q=gi();
    for(re ll i=1;i<=n;i++){
        a[i]=gi();
        sum[i]=sum[i-1]+a[i];
    }
    while(q--){
        ll l=gi(),r=gi(),p=gi();ll ans=1e18;
        if(r-l+1>p){puts("0");continue;}
        memset(bj,0,sizeof(bj));
        ll size=sqrt(p)/2;
        for(re int qujian=l-1;qujian<=r;qujian++){
            for(re ll k=size;k>=0;k--)
                if(bj[(p+sum[qujian]-k)%p]){
                    ans=min(ans,k);if(!ans)break;
                }
            if(!ans)break;
            bj[sum[qujian]%p]=1;
        }
        if(ans!=1e18){
            printf("%lld\n",ans);
            continue;
        }
        int flag=0;
        for(re ll i=l;i<=r;i++){
            for(re ll j=i;j<=r;j++){
                ans=min(ans,(sum[j]-sum[i-1])%p);
                if(sum[i-1]==sum[j]){
                    flag=1;break;
                }
            }
            if(flag)break;
        }
        printf("%lld\n",ans);
    }
    return 0;
}

T3

小奇回地球
直接SPFA判负环然后二分答案就出来了...

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<iostream>
#define ll long long
#define re register
using namespace std;
inline int gi(){
    int f=1,sum=0;char ch=getchar();
    while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    return f*sum;
}
const int Inf=1000000000+10;
struct node{
    int to,nxt,w;
}e[1000010];
int front[110],cnt,mark[110],can[110],dis[110],n;
void Add(int u,int v,int w){
    e[++cnt]=(node){v,front[u],w};front[u]=cnt;
}
void dfscan(int u){
    mark[u]=1;
    for(re int i=front[u];i;i=e[i].nxt)
        if(!mark[e[i].to])dfscan(e[i].to);
}
bool dfs(int u,int mid){
    mark[u]=1;
    for(re int i=front[u];i;i=e[i].nxt){
        int v=e[i].to;
        if(can[v] && dis[v]>dis[u]+e[i].w+mid){
            if(mark[v])return 1;
            dis[v]=dis[u]+e[i].w+mid;
            if(dfs(v,mid))return 1;
        }
    }
    mark[u]=0;
    return 0;
}
int vis[100010];
void spfa(int mid){
    queue<int >Q;
    while(!Q.empty())Q.pop();
    Q.push(1);dis[1]=0;vis[1]=0;
    while(!Q.empty()){
        int u=Q.front();Q.pop();
        for(re int i=front[u];i;i=e[i].nxt){
            int v=e[i].to;
            if(dis[v]>dis[u]+e[i].w+mid && can[v]){
                dis[v]=dis[u]+e[i].w+mid;
                if(!vis[v]){
                    vis[v]=1;Q.push(v);
                }
            }
        }
        vis[u]=0;
    }
}
bool check(int mid){
    for(re int i=1;i<=n;i++)
        if(can[i]){
            for(re int j=1;j<=n;j++)dis[j]=Inf;
            memset(mark,0,sizeof(mark));
            if(dfs(i,mid))return 0;
        }
    for(re int i=1;i<=n;i++){
        dis[i]=Inf;vis[i]=0;
    }
    spfa(mid);
    if(dis[n]<0 || dis[n]==Inf)return 0;
    return 1;
}
int m;
int main(){
    freopen("earth.in","r",stdin);
    freopen("earth.out","w",stdout);
    int T=gi();
    while(T--){
        memset(front,0,sizeof(front));cnt=0;
        n=gi();m=gi();
        for(re int i=1;i<=m;i++){
            int u=gi(),v=gi(),w=gi();
            Add(u,v,w);
        }
        memset(mark,0,sizeof(mark));
        dfscan(1);memset(can,1,sizeof(can));
        for(re int i=1;i<=n;i++)if(!mark[i])can[i]=0;
        for(re int i=1;i<=n;i++)
            if(can[i]){
                memset(mark,0,sizeof(mark));
                dfscan(i);
                if(!mark[n])can[i]=0;
            }
        int l=-100000,r=100000,ans=-1;
        while(l<=r){
            int mid=(l+r)/2;
            if(check(mid)){
                ans=dis[n];r=mid-1;
            }
            else l=mid+1;
        }
        printf("%d\n",ans);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/cjgjh/p/9530554.html

时间: 2024-11-14 19:56:24

8.24考试总结的相关文章

9.24考试总结

真难,真的 虽然有暴力,但我看了题目连暴力都不想写 这次考试特别亏,明明就在眼前的暴力分我没有拿,可能是被题目吓到了吧 第一题糖果我是在纸上算出了2种情况,但是不是最优的,只拿了30分.但是如果我动笔算前4组的话本来是可以拿到40分的. 这道题100分的题解我没有看懂,只看懂了70分的二分题解,二分确实是一个很实用的技能,以后得好好学 第二题旅行 这道题.......不会,真的,不会,连暴力也不会写 第三题是有40分的暴力可以拿的,但是我愚蠢的去写了第二题,结果第三题看都没看.... 总之这次考

项目管理者联盟PMP认证与培训班针对2015年3月考试(1月24日开课)

美国项目管理学会全球教育合作伙伴(Global REP) 国家外专局培训中心授权机构 (全面针对PMBOK第五版考试) 面向对象 各类科技与研发.IT软件与通信.工程与设计等项目导向型企业的各级管理人员与项目管理人员.项目经理与技术经理,有志于成长为项目经理的优秀工程师与技术骨干. 课程优势  十余年美国项目管理学会全球教育合作伙伴(Global R.E.P. No. 3254),2003年开始PMP培训,课程质量业界认可,服务专业.专注. 国内最强大的PMP专家团队.主讲老师具备世界500强外

[考试反思]0214省选模拟24:揣测

还行吧.至少不算炸.虽说这个分的确也不怎么样. 考试的时候觉得$T2$是个计数,部分分好像还挺多,应该可想. 然后在$T2$上刚了仨小时,因为做的题不够会的知识点也不够所以只有签到分. $T1$的话贪心暴力随便写就是了用不到一个小时. 然而其实$T1$是最可想的一个...应该吧... 这种难度的题以目前水平想出一道可能就要几个小时,所以一场考试基本只能压一道题. $T2$早就有了$36$分的思路,然而最关键的一步居然是个其他题的结论,听说过但没记住,于是就没了. 得亏$T3$是个恶心的原题,然而

AC日记 - - - 24——期末考试之排名次

Problem Description 期末考试结束了,童鞋们的成绩也出来的了,可是为了排名次可忙坏了老师,因为学生太多了.这时,老师把这个任务交给了你,希望你能帮老师完成.作为IT人,你当然不能用笨笨的人工方法了,编程解决才是好办法.共有三门课,语文.数学和英语,要求根据学生的各科成绩计算出其总成绩,并根据总成绩从高到低排序. Input 第一行一个整数N(N<=100),代表学生的人数.接下来的N行数据,每行有三个整数,C,M,E分别代表一个学生语文.数学和英语的成绩. Output 一共N

[1z0-062]OCP-12c近期出现的考试新题-第24题

24题:choose one Your database instance is started by using a server parameter file (SPFILE). You execute the following command to change the value of the LOG_BUFFER initialization parameter: ALTER SYSTEM SET LOG_BUFFER=32M; What is the outcome of this

考试报告 模拟24

T1 改题时遇到的问题: 1.搜索时只有树才可以dfs(int x,int f) 2.注意开long long!!!! 题解: 思路不难想(可我考场上还是没想出来),问最小距离的最大值,显然是个二分答案,考虑check(两点之间的距离),上边界和下边界分别抽象成一个点,能不能到,就是看路径上有没有完全阻断的路,那么就可以将每个点按照ans/2的半径作圆,如果有交集就将其连边,那么就从上边界开始dfs,若能找到下边界说明不行,剪枝:先将k个点按照横坐标升序排列,建边的时候如果距离>ans就不用建边

【OCP-12c】CUUG 071题库考试原题及答案解析(24)

choose the best answer In the EMPLOYEES table there are 1000 rows and employees are working in the company for more than 10 years. Evaluate the following SQL statement: SQL> UPDATE employees SET salary = NVL(salary,0) + NVL(comm,0),comm = NVL(comm,0)

【2019年8月】OCP 071认证考试最新版本的考试原题-第24题

Choose three. Which three statements are true about GLOBAL TEMPORARY TABLES? A) A GLOBAL TEMPORARY TABLE cannot have PUBLIC SYNONYM. B) A GLOBAL TEMPORARY TABLE can have multiple indexes C) A GLOBAL TEMPORARY TABLE can be referenced in the defining q

在线考试系统(Online Exam System)--ASP.NET

用户设计 -|学生 -|老师 -|管理员 学生结构设计 -|个人信息管理 -|修改个人信息 -|修改登录密码 -|选课中心 -|显示所有老师所开课的信息可进行选课 -|显示自己已选课程 -|在线考试 -|对已选老师开设的课程选择进行考试 -|成绩查询 -|查看自己考试成绩   老师结构设计 -|个人信息管理 -|修改个人信息 -|修改登录密码 -|课程管理 -|显示学校开设的课程(老师可选择添加课程) -|显示老师开设的课程 -|考试管理 -|显示老师自己开设的课程 -|对课程添加试题(选择.填