cf1199解题报告
cf1199解题报告
发一波水题。
A
模拟
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int _=1e6+7;
int n,x,y,a[_];
int main() {
scanf("%d%d%d",&n,&x,&y);
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
for(int d=1;d<=n;++d) {
int flag=0;
for(int j=max(1,d-x);j<d;++j)
if(a[d]>=a[j]) flag=1;
for(int j=d+1;j<=min(n,d+y);++j)
if(a[d]>=a[j]) flag=1;
if(!flag) return printf("%d\n",d),0;
}
return 0;
}
B
小学几何题。输出lf格式不对错了几发、、、
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int _=1e6+7;
double H,L,x;
int main() {
cin>>H>>L;
double x=(H*H+L*L)/(2*H);
printf("%.13lf\n",x-H);
return 0;
}
C
最多能保留几个不同的数,然后删就行了。
我以为是\(map\)的\(log\)太大了T了。
其实是暴利统计最多保留几个没加范围。
#include <bits/stdc++.h>
using namespace std;
const int _=4e5+7;
int n,m,k,a[_],ans=0x3f3f3f3f;
int Hash[_],lsh[_];
vector<pair<int,int> > tmp;
int sum[_];
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int main() {
n=read(),m=read()*8;
for(int i=1;i<=n;++i) lsh[i]=a[i]=read();
sort(lsh+1,lsh+1+n);
int len=unique(lsh+1,lsh+1+n)-lsh-1;
for(int i=1;i<=n;++i) a[i]=lower_bound(lsh+1,lsh+1+len,a[i])-lsh;
for(int i=1;i<=n;++i) Hash[a[i]]++;
while((int)ceil(log2(k+1))*n<=m&&k<=n) k++;
for(int i=1;i<=n;++i)
if(Hash[i]) tmp.push_back(make_pair(i,Hash[i]));
int Siz=tmp.size();
for(int i=0;i<Siz;++i) {
if(i) sum[i]=sum[i-1];
sum[i]+=tmp[i].second;
if(i<k) ans=min(ans,n-sum[i]);
else ans=min(ans,n-sum[i]+sum[i-k]);
}
printf("%d\n",ans);
return 0;
}
D
每个数最后的值=max(上一次更改的值,这段时间内政府补贴的最大值)。
由于都是后缀,\(O(n)\)统计一遍就行了。
当然也可以学傻了写线段树或者BIT。
#include <bits/stdc++.h>
using namespace std;
const int _=4e5+7;
namespace seg {
#define ls rt<<1
#define rs rt<<1|1
int a[_],ma[_<<2];
void build(int l,int r,int rt) {
if(l==r) {ma[rt]=a[l];return;}
int mid=(l+r)>>1;
build(l,mid,ls);
build(mid+1,r,rs);
ma[rt]=max(ma[ls],ma[rs]);
}
int modify(int L,int R,int l,int r,int rt) {
if(L>R) return 0;
if(L<=l&&r<=R) return ma[rt];
int mid=(l+r)>>1,ma=0;
if(L<=mid) ma=max(ma,modify(L,R,l,mid,ls));
if(R>mid) ma=max(ma,modify(L,R,mid+1,r,rs));
return ma;
}
}
int n,a[_],las[_],q,dsr[_];
int main() {
// freopen("a.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
scanf("%d",&q);
for(int i=1,opt,p,x;i<=q;++i) {
scanf("%d",&opt);
if(opt==1) scanf("%d%d",&p,&x),las[p]=i,dsr[i]=x;
else scanf("%d",&x),seg::a[i]=x;
}
seg::build(1,q,1);
for(int i=1,val;i<=n;++i) {
if(!las[i]) val=a[i];
else val=dsr[las[i]];
val=max(val,seg::modify(max(las[i],1),q,1,q,1));
printf("%d ",val);
}
return 0;
}
E
\(matching\)和\(indset\)至少存在一个。
每次遇到符合\(matching\)的边就加上。
做完后,剩下的点就是\(indset\)的。
反证:没在\(matching\)的两个点,而且有边相连,显然矛盾。
因为是\(3n\)个点,所以做完后一定有一个满足条件。
#include <bits/stdc++.h>
using namespace std;
const int _=5e5+7;
int T,n,m,vis[_];
std::vector<int> dsr;
int main() {
scanf("%d",&T);
while(T --> 0) {
scanf("%d%d",&n,&m);
dsr.clear();
for(int i=1;i<=3*n;++i) vis[i]=0;
for(int i=1,u,v;i<=m;++i) {
scanf("%d%d",&u,&v);
if(!vis[u]&&!vis[v]) {
vis[u]=vis[v]=1;
dsr.push_back(i);
}
}
if((int)dsr.size()>=n) {
printf("Matching\n");
for(int i=0;i<n;++i) printf("%d ",dsr[i]);
printf("\n");
} else {
printf("IndSet\n");
for(int i=1,js=1;js<=n;++i)
if(!vis[i]) printf("%d ",i),++js;
printf("\n");
}
}
return 0;
}
F
大爆搜
\(f[x][y][X][Y]\)表示左上角\((x,y)\),右下角\((X,Y)\)的矩阵变为白色的最小代价。
每次转移\(O(n)\),有\(O(n^4)\)个转态。复杂度\(O(n^5)\)
#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
const int _=51;
int n,s[_][_],num[_][_],f[_][_][_][_];
char S[_][_];
int calc(int x,int y,int X,int Y) {
return s[X][Y]-s[x-1][Y]-s[X][y-1]+s[x-1][y-1];
}
int dfs(int x,int y,int X,int Y) {
if(!calc(x,y,X,Y)||f[x][y][X][Y]) return f[x][y][X][Y];
if(x==X&&y==Y) {f[x][y][X][Y]=1;return 1;}
f[x][y][X][Y]=max(X-x+1,Y-y+1);
for(int i=x;i<X;++i)
f[x][y][X][Y]=min(f[x][y][X][Y],dfs(x,y,i,Y)+dfs(i+1,y,X,Y));
for(int i=y;i<Y;++i)
f[x][y][X][Y]=min(f[x][y][X][Y],dfs(x,y,X,i)+dfs(x,i+1,X,Y));
return f[x][y][X][Y];
}
int main() {
freopen("a.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;++i) {
scanf("%s",S[i]+1);
for(int j=1,tot=0;j<=n;++j) {
tot+=(S[i][j]=='#');
s[i][j]=s[i-1][j]+tot;
}
}
printf("%d\n",dfs(1,1,n,n));
return 0;
}
cf1199解题报告的更多相关文章
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- 习题:codevs 1035 火车停留解题报告
本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...
- 习题: codevs 2492 上帝造题的七分钟2 解题报告
这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...
- 习题:codevs 1519 过路费 解题报告
今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
- LeetCode 解题报告索引
最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中...... ...
随机推荐
- spering getBean(),IOC
IOC:前面都是对bean定义的处理,postProcess已经实例化了. 解析bean的时候,把需要依赖注入的字段和方法,在postProcessMergedBeanDefinition方法中加到A ...
- 【layui】【laydate】设置可以选择相同的年份范围
1.效果: 2.解决方法: 修改laydate.js源码 全局查询T.prototype.setBtnStatus这个只有一个,就是点击控件时调用的事件,里面添加下面代码 if( this.confi ...
- 订单1:n支付单 设计讨论
方法一:订单1:1支付单,下单时生成1订单,并生成1支付单(这个支付单是微信需要的相关信息),设置超时时间2小时,如果订单超时,则提示用户,订单已超时,重新下单即可: 方法二:订单1:N支付单,下单时 ...
- 使用semaphore写一个显示锁
/** * 这里只是将Semaphore包装了一下,注意当Semaphore的构造参数是1时,本身就是一个显示锁 */ public class SemaphoreLock { ); public v ...
- 图解微信小程序---实现页面的跳转与返回操作
图解微信小程序---实现页面的跳转与返回操作 代码笔记 操作步骤 第一步:在app.json配置文件中,创建跳转页面 第二步:编写首页跳转(注意跳转方式,和设置点击样式类名) 第三步:编写首页样式 第 ...
- 【02】Jenkins:第一个项目
写在前面的话 通过上一节我们成功的搭建起来 Jenkins,那么接下来就是体验如何构建我们的第一个项目了.当然在这之前我们得专门针对 Java 环境就行简单的配置. 全局工具配置 其实这次配置的主要还 ...
- WPF 精修篇 动态资源
原文:WPF 精修篇 动态资源 动态资源 使用 DynamicResource 关键字 静态 就是 StaticResource 原则上是 能用静态就用静态 动态会让前台界面压力很大~ 动态资源引用 ...
- 在Visual studio上发布web项目,并添加到IIS服务器上。
1.首先发布到IIS上 https://blog.csdn.net/kydkong/article/details/49563193 2.NET4.0部署出错HTTP 错误500.21 - Inter ...
- PIE 插件式开发小笔记__PIESDK学习体会
基于PIE.NET-SDK插件式二次开发文档笔记: PIE 插件式开发配置文件: 它里面一行如下: 理解上一行'Item'关系-> library:为插件类名(程序集名称+后缀 ...
- 安装ceres-solver win10遇到Eigen安装的问题
1.无法打开包括文件: “Eigen/Core”: 去github上下载最新的源码 2. "The Eigen/Array header does no longer exist in E ...