2019 CCPC-Wannafly Winter Camp Div2 Day1

补题进度 7/11

J 夺宝奇兵

范围较小,直接枚举靠多少票赢即可,不够的票从小到大买

#include<bits/stdc++.h>
#define ll long long
const int maxn = 1005;
using namespace std;
struct node
{ll id,val;int pos;
}p[maxn],P[maxn];
bool vis[maxn];
bool cmp(node u,node v)
{return u.val<v.val;
}
bool cmp2(node u,node v)
{if(u.id==v.id) return u.val>v.val;return u.id<v.id;
}
int main()
{int n,m;cin>>n>>m;for(int i=1; i<=m; i++){cin>>p[i].val>>p[i].id;p[i].pos=i;P[i]=p[i];}ll ans=1e18;sort(P+1,P+1+m,cmp);sort(p+1,p+1+m,cmp2);for(int i=1; i<=m; i++){memset(vis,0,sizeof(vis));int have=0;//当前有的票int need=i;//赢需要多少票int x=0;ll val=0;for(int j=1; j<=m; j++){if(p[j].id!=p[j-1].id) x=1;else x++;if(x>need) //别人票数大于你赢时需要的票数
            {have++;val+=p[j].val;vis[p[j].pos]=1;}}if(have<=need) {for(int j=1; j<=m; j++){if(!vis[P[j].pos]){vis[P[j].pos]=1;have++;val+=P[j].val;if(have>need) break;}}}if(have>need)ans=min(ans,val);// cout<<i<<" "<<ans<<endl;
    }cout<<ans<<endl;
}
View Code

 

F 爬爬爬山

我们很容易知道,当其他山大于第一座山+体力值时,此个山是到达不到的。所以我们在遇到这种情况的时候,我们直接把需要把减掉的花费建到边权就ok了,然后跑dij

#include<bits/stdc++.h>
#define FIN freopen("input.txt","r",stdin)
#define ll long long
#define mod 998244353
const int maxn = 100005;
using namespace std;
int h[maxn],Next[maxn*20],head[maxn],To[maxn*20];
ll len[maxn*20],dis[maxn];
bool vis[maxn];
int cnt,n;
inline void add(int u,int v,ll w)
{Next[++cnt]=head[u];head[u]=cnt;To[cnt]=v;len[cnt]=w;
}
void dij()
{for(int i=1;i<=n;i++)dis[i]=2e18;dis[1]=0;priority_queue<pair<ll,int> ,vector<pair<ll,int> > , greater< pair<ll,int> > >q;q.push(make_pair(0,1));while(!q.empty()){pair<ll,int> tmp=q.top();q.pop();int u=tmp.second;if(vis[u]) continue;vis[u]=1;for(int i=head[u];i!=-1;i=Next[i]){int v=To[i];ll d=len[i];//    cout<<v<<" "<<len[i]<<endl;if(dis[v]>dis[u]+d){dis[v]=dis[u]+d;q.push(make_pair(dis[v],v));}}}
}
int main()
{#ifndef ONLINE_JUDGEFIN;#endifmemset(head,-1,sizeof(head));int m;ll k;cin>>n>>m>>k;for(int i=1;i<=n;i++){cin>>h[i];}for(int i=1;i<=m;i++){int u,v;ll w;cin>>u>>v>>w;add(u,v,w+max(0LL,(h[v]-h[1]-k))*max(0LL,(h[v]-h[1]-k)));add(v,u,w+max(0LL,(h[u]-h[1]-k))*max(0LL,(h[u]-h[1]-k)));}dij();cout<<dis[n]<<endl;
}
View Code

 

B 吃豆豆

数据是10*10的二维矩阵,数据特别小,我们直接对于每秒直接算暴力算此秒的值就好了

#include<bits/stdc++.h>
#define FIN freopen("input.txt","r",stdin)
#define ll long long
#define mod 998244353
const int maxn = 100005;
using namespace std;
ll dp[11][11][20000];
int dir[5][2]={1,0,-1,0,0,-1,0,1,0,0};
bool vis[11][11][20000];
int T[11][11];
int main()
{#ifndef ONLINE_JUDGEFIN;#endifint n,m,c;cin>>n>>m>>c;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>T[i][j];int xs,ys,xt,yt;cin>>xs>>ys>>xt>>yt;vis[xs][ys][0]=1;for(int k=1;;k++){for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(!vis[i][j][k-1]) continue;for(int p=0;p<5;p++){int x=i+dir[p][0];int y=j+dir[p][1];if(x<1||x>n||y<1||y>m) continue;vis[x][y][k]=1;if(k%T[x][y]==0)dp[x][y][k]=max(dp[x][y][k],dp[i][j][k-1]+1);else dp[x][y][k]=max(dp[x][y][k],dp[i][j][k-1]);if(x==xt&&y==yt&&dp[x][y][k]>=c){cout<<k<<endl;return 0;}}}}
}
View Code

 

C 拆拆拆数

直接拆成两个数(待证)

#include<bits/stdc++.h>
#define FIN freopen("input.txt","r",stdin)
#define ll long long
#define mod 998244353
const int maxn = 3000005;
using namespace std;
ll prime[1005];
bool isprime[1005];
int main()
{#ifdef ONLINE_JUDGE#else FIN;#endifint n,cnt=0;cin>>n;for(int i=2;i<=1000;i++){if(isprime[i]==0){prime[++cnt]=i;for(int j=1;j*i<=1000;j++){isprime[i*j]=1;}}}while(n--){ll a,b;cin>>a>>b;if(__gcd(a,b)==1)cout<<1<<"\n"<<a<<" "<<b<<"\n";else {for(int i=1;i<=cnt;i++){if(__gcd(a-prime[i],prime[i])==1&&(__gcd(prime[i],b-prime[i])==1)){cout<<2<<"\n";cout<<a-prime[i]<<" "<<prime[i]<<"\n";cout<<prime[i]<<" "<<b-prime[i]<<"\n";break;}}}}
}
View Code

 

I 起起落落

题目是求 p[2k1]>p[2k+1]>p[2k]​的子序列有多少个。 我们定义dp[i] 表示前i个有多少个满足要求的子序列。

思路:dp[i]的值 可以由dp[1~i-2]得到 我们定义k代表可以使用的中间点

当a[1~i-2]>a[i]时我们可以直接算贡献 为(dp[]+1)*k  当a[2~i-2]<a[i]时我们都能讲此点作为中间点 k++;

#include<bits/stdc++.h>
#define FIN freopen("input.txt","r",stdin)
#define ll long long
#define mod 1000000007
const int maxn = 2000+5;
using namespace std;
ll dp[maxn];
int a[maxn];
int main()
{#ifndef ONLINE_JUDGEFIN;#endifint n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];int ans=0;for(int i=3;i<=n;i++)  //枚举右端点
    {int k=a[i]>a[i-1];for(int j=i-2;j>=1;j--){if(a[j]>a[i])dp[i]=(dp[i]+(dp[j]+1)*k)%mod;else if(a[j]<a[i])k++;}ans=(ans+dp[i])%mod;}cout<<ans<<endl;
}
View Code

 

A 机器人

分类讨论即可 我们会发现我们最多传送两次即可走到所有点

最后可以分为两类:1.都在a区 答案直接为s点到最左点的特殊点和s到最右的特殊点的两倍

                                 2.b区有 答案为1类答案再加上 2*k

要注意的是 a区 起点可作为转向点

详细可以参考如下博客:https://blog.csdn.net/CaprYang/article/details/86655459

代码同上~

 

E 流流流动

树形dp 按题意写即可~

#include<bits/stdc++.h>
#define FIN freopen("input.txt","r",stdin)
#define ll long long
#define mod 1000000007
const int maxn = 300+5;
using namespace std;
int head[maxn],To[maxn*20],Next[maxn*20];
int f[maxn],d[maxn],dp[maxn][2],cnt;
bool vis[maxn];
inline void add(int u,int v)
{Next[++cnt]=head[u];head[u]=cnt;To[cnt]=v;
}void dfs(int u,int fa)
{vis[u]=1;dp[u][0]=0;dp[u][1]=f[u];for(int i=head[u];i!=-1;i=Next[i]){int v=To[i];if(v==fa) continue;dfs(v,u);dp[u][0]+=max(dp[v][1],dp[v][0]);dp[u][1]+=max(dp[v][0],dp[v][1]-d[min(u,v)]);}
}int main()
{#ifndef ONLINE_JUDGEFIN;#endifmemset(head,-1,sizeof(head));int n;cin>>n;for(int i=1;i<=n;i++)cin>>f[i];for(int i=1;i<=n;i++)cin>>d[i];for(int i=2;i<=n;i++){if(i&1) {add(i,3*i+1);add(3*i+1,i);}else {add(i,i/2);add(i/2,i);}}int ans=0;for(int i=1;i<=n;i++){if(!vis[i]){dfs(i,0);ans+=max(dp[i][0],dp[i][1]);}}cout<<ans<<"\n";
}
View Code

 

 

K 星球大战

unsolved

 

H 我爱割葱

unsolved

 

代更

转载于:https://www.cnblogs.com/MengX/p/10326116.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

根据输入的日期计算周次和月份

需求&#xff1a; 1.根据输入的日期拆分成按周或按月显示 2.规定周的开始日期从星期一开始&#xff0c;星期日结束 3.不足7天的一周&#xff0c;如果小于2天&#xff0c;则合并到上周或下周&#xff1b;大于2天的则自成一周 代码&#xff1a; CREATE OR REPLACE PROCEDURE …

[vue] 写出多种定义组件模板的方法

[vue] 写出多种定义组件模板的方法 1、字符串 2、模板字面量 3、<script type"x-template"></script> 4、文件组件模板 5、inline-template个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大…

[vue] 如何实现一个虚拟DOM?说说你的思路

[vue] 如何实现一个虚拟DOM&#xff1f;说说你的思路 虚拟DOM本身是一个JavaScript对象模拟真实DOM &#xff0c;用对象的属性去描述一个DOM节点&#xff0c;最终也只是一个真实DOM的映射个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c;…

oracle 日期计算

--计算当前日期的上周时间段 select (trunc(sysdate-7,DD)-to_char(sysdate-7,D)1) as last_week_start_date,(trunc(sysdate-7,DD)-to_char(sysdate-7,D)7) as last_week_end_date from dual --根据年、月、周、星期计算日期 CREATE OR REPLACE FUNCTION get_date(y n…

Android项目实战欢迎界面

欢迎界面 首先同理把欢迎界面的图片导入到drawable目录下&#xff0c;在导入时 Android Studio 会提示如下 drawable 具体本人尚未弄明白&#xff0c;待理解后会重新补全本部分内容&#xff0c;在此本人选了第一个 然后创建一个包名为activity的包&#xff0c;在activity下创建…

[vue] 怎么捕获组件vue的错误信息?

[vue] 怎么捕获组件vue的错误信息&#xff1f; errorHandler个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

flume记录(2)监控文件和目录,对hdfs操作

flume-ng agent --conf-file filename --name a1 -Dflume.root.loggerINFO,console 监控某个文件&#xff1a;配制如下 # Name the components on this agent a1.sources r1 a1.sinks k1 a1.channels c1# Describe/configure the source            进行如下配制…

Oracle中5个核心Sql语句的基本构造:Select、Insert、Update、Delete和Merge

Sql语言提供了很多不同的选择来得到同样的结果集&#xff0c;关键是需要搞清楚在不同的使用场景下哪种构造是最高效的。 1.Select语句 Select语句用来从一个表中&#xff0c;或者其他数据库对象中提取数据。 select <column list> from <table or view> where <…

[vue] 如果将axios异步请求同步化处理?

[vue] 如果将axios异步请求同步化处理&#xff1f; // 统一处理axios请求async getHistoryData (data) {try {let res await axios.get(/api/survey/list/, {params: data})this.tableData res.data.resultthis.totalData res.data.count} catch (err) {console.log(err)al…

在Airtest中如何使用无线模式控制手机

在Airtest中如何使用无线模式控制手机 在使用Airtest超快速开发App爬虫文章的最后&#xff0c;我们留了一个尾巴&#xff1a;如何启动Airtest的无线模式&#xff0c;不用USB线就能控制手机&#xff1f; 本文将会讲到具体的做法。做法分为两种&#xff1a;第一种是在Airtest的ID…

[vue] 说说你对vue的extend(构造器)的理解,它主要是用来做什么的?

[vue] 说说你对vue的extend&#xff08;构造器&#xff09;的理解&#xff0c;它主要是用来做什么的&#xff1f; extend的作用是继承当前的Vue类&#xff0c;传入一个extendOption生成一个新的构造函数。在extend的时候会进行mergeOption&#xff0c;融合Vue原型上的baseOpti…

使用Oracle做定时任务

declare jobno number;begin dbms_job.submit(jobno,cx_qcsiteadmin_db.qp_pre_load_report;,trunc(sysdate),trunc(sysdate)1);--每天零点更新 commit;end;

tab页

图片&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style type"text/css"> /* 上边tab */ html {font-size: 14px }body {margin: 0;padding:…

[vue] vue-loader是什么?它有什么作用?

[vue] vue-loader是什么&#xff1f;它有什么作用&#xff1f; 解析和转换 .vue 文件&#xff0c;提取出其中的逻辑代码 script、样式代码 style、以及 HTML 模版 template&#xff0c;再分别把它们交给对应的 Loader 去处理。个人简介 我是歌谣&#xff0c;欢迎和大家一起交…

Day 14 20190129 老男孩python学习第14天 内容整理

码代码&#xff0c;6个小时。 # 1. 请用代码实现&#xff1a; 利用下划线将列表的每一个元素拼接成字符串&#xff0c; li [alex, eric, rain] # li [alex, eric, rain] # print(_.join(li))# 2. 查找列表中元素&#xff0c;移除每个元素的空格&#xff0c;并查找以a或A开头并…

[vue] 为什么我们写组件的时候可以写在.vue里呢?可以是别的文件名后缀吗?

[vue] 为什么我们写组件的时候可以写在.vue里呢&#xff1f;可以是别的文件名后缀吗&#xff1f; 也可以写为js,jsx,ts,tsx这种个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通…

Introduction to ES6上课笔记

课程链接&#xff1a;https://scrimba.com/g/gintrotoes6 这个网站有几个热门的前端技术栈的免费课程&#xff0c;上课体验除了英语渣只能看代码理解听老师讲的一知半解之外&#xff0c;是极佳的学编程的网站了。你跟老师同一个编译器上编译代码&#xff0c;超强体验&#xff0…

[vue] 你了解什么是高阶组件吗?可否举个例子说明下?

[vue] 你了解什么是高阶组件吗&#xff1f;可否举个例子说明下&#xff1f; 高阶组件 高阶组件介绍 vue 高阶组件的认识&#xff0c;在React中组件是以复用代码实现的&#xff0c;而Vue中是以mixins 实现&#xff0c;并且官方文档中也缺少一些高阶组件的概念,因为在vue中实现…

修改Tomcat端口号

8080是Tomcat服务器的默认端口号。我们可以通过修改Tomcat/conf文件夹下的主配置文件server.xml来更改端口号。用记事本打开server.xml文件&#xff0c;找出出现以下代码的部分&#xff1a; <!-- A "Connector" represents an endpoint by which requests are rec…

序列化与反序列化的简单认识

把对象转换为字节序列的过程称为对象的序列化。  把字节序列恢复为对象的过程称为对象的反序列化。  对象的序列化主要有两种用途&#xff1a;  1&#xff09; 把对象的字节序列永久地保存到硬盘上&#xff0c;通常存放在一个文件中&#xff1b;  2&#xff09; 在网络…