emu1
2024-10-14 05:32:29
第一题
一个很奇怪的贪心。先排序一遍,再扫描一遍,能加入尽量加入,不能加入就一定不能加入。。由于每次都在可能的最早时间加入一个数可以保证差最小?反正差不多这样了。
O(n log n)
#include <cstdio>
#include <algorithm>
bool cmp(int a,int b){
return a>b;
}
int m,n,i,j,k,f[200000],g[200000];
int sumn,sumd;
int main(){
freopen("stockman.in","r",stdin);
freopen("stockman.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=0;i<n;++i) scanf("%d",f+i);
for(i=0;i<m;++i) scanf("%d",g+i);
std::sort(f,f+n);
std::sort(g,g+m);
i=n-1;j=m-1;
while(i>=0 && j>=0){
//while using the jth stockman trying to match the ith pig
if(f[i]>=g[j]){
if(!(i&&j)||f[i-1]<=g[j]||f[i-1]>=g[j-1]){
++sumn;
sumd+=f[i]-g[j];
--i;
--j;
continue;
}
--i;
}else{
--j;
}
}
printf("%d\n%d\n",sumn,sumd);
return 0;
}
似乎有个更好的堆的解法?
#include <cstdio>
#include <queue>
#include <algorithm>
std::priority_queue<int> q;
int m,n,i,j,k,f[200000],g[200000];
int sumn,sumd;
int main(){
freopen("stockman.in","r",stdin);
freopen("stockman.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=0;i<n;++i) scanf("%d",f+i);
for(i=0;i<m;++i) scanf("%d",g+i);
std::sort(f,f+n);
std::sort(g,g+m);
for(i=0;i<n;++i){
while(f[i]>=g[j] && j<m){
q.push(g[j]);
++j;
}
if(!(q.empty())){
++sumn;
sumd+=f[i]-q.top();
q.pop();
}
}
printf("%d\n%d\n",sumn,sumd);
return 0;
}
第二题。。
先BFS一遍求出每个点与最近的敌人的距离,再二分答案能否到达,BFS求距离。
O(log{max(dis)==2000}mn)最沙茶的数据也可以过吧。。
#include <cstdio>
#include <cstring>
int qx[8000000],qy[8000000],qh,qt;
int f[2000][2000],m,n,i,j,k,x,y,x1,x2,y1,y2;
bool accessed[2000][2000];
char ch;
int left,right,mid,ans,ansl;
int minl[2000][2000];
inline void relax(int x,int y,int v){
if(accessed[x][y]) return;
if(x<0 || y<0 || x==n || y==m) return;
f[x][y]=v;
accessed[x][y]=true;
qx[qt]=x;
qy[qt++]=y;
}
inline void relax2(int x,int y,int v,int l){
if(accessed[x][y] || f[x][y]<l) return;
if(x<0 || y<0 || x==n || y==m) return;
minl[x][y]=v;
accessed[x][y]=true;
qx[qt]=x;
qy[qt++]=y;
}
bool check(int least){
memset(accessed,0,sizeof accessed);
qh=qt=0;
qx[qt]=x1;
qy[qt++]=y1;
minl[x1][y1]=0;
accessed[x1][y1]=true;
while(qh!=qt){
x=qx[qh];
y=qy[qh++];
i=minl[x][y]+1;
relax2(x,y+1,i,least);
relax2(x,y-1,i,least);
relax2(x+1,y,i,least);
relax2(x-1,y,i,least);
}
return accessed[x2][y2];
}
int main(){
freopen("escape.in","r",stdin);
freopen("escape.out","w",stdout);
scanf("%d%d%d%d%d%d%d",&k,&n,&m,&x1,&y1,&x2,&y2);
for(i=0;i<k;++i){
scanf("%d%d",&x,&y);
qx[qt]=x;
qy[qt++]=y;
}
while(qh!=qt){
x=qx[qh];
y=qy[qh++];
i=f[x][y]+1;
relax(x,y+1,i);
relax(x,y-1,i);
relax(x+1,y,i);
relax(x-1,y,i);
}
left=0;right=f[x1][y1];
while(left<=right){
mid=(left+right)/2;
if(check(mid)){
left=mid+1;
ans=mid;
ansl=minl[x2][y2];
}else{
right=mid-1;
}
}
printf("%d %d\n",ans,ansl);
return 0;
}
第三题
orz WJZ神犇的双参数SPFA。
______________________________________________________________________
最新文章
- ASP.NET MVC关于Ajax以及Jquery的无限级联动
- 使用c/c++扩展python
- PHP流程控制之特殊结构
- Query Designer:变量注意事项
- 把 表拷贝到test测试数据库
- ant新建scp和sshexec任务
- 【Apache运维基础(2)】主配置文件说明
- Javascript之<;script>;标签
- 高并发数据库之MySql性能优化
- JDK中日期和时间的几个常用类浅析(三)
- oracle12之 多租户容器数据库架构
- spring boot hello and docker
- 挖一挖不常用到而又很实用的重载-Trim
- String字符串类总结
- java.lang.NullPointerException 	at java.lang.ProcessBuilder.start(Unknown Source) 	at org.apache.hadoop.util.Shell.runCommand(Shell.java:482)
- MonGoDB 常见操作, 设置管理员和用户登入
- Codeforces.1027F.Session in BSU(思路 并查集)
- mysql中,now()函数和sysdate()函数有什么区别?
- 从上往下打印二叉树(java)
- [javaSE] GUI(Action事件)
热门文章
- solr导入mysql数据库
- iOS边练边学--AFNetWorking框架GET、Post、Download、Upload,数据解析模式以及监控联网状态
- VS中两个常用辅助工具
- 处理Json数据中的日期类型.如/Date(1415169703000)/格式
- 【前端学习】git命令行界面
- python 学习笔记1(序列;if/for/while;函数;类)
- BZOJ-4300 绝世好(蛋疼)题 DP(递推)
- UVA 11527 Unique Snowflakes
- POJ 1470 Closest Common Ancestors
- Laravel5.1 启动详解