A.简单dp。

#include<bits/stdc++.h>
using namespace std; int n,a[],dp[][] = {}; int main()
{
ios::sync_with_stdio();
cin >> n;
for(int i = ;i <= n;i++) cin >> a[i];
int ans = ;
for(int i = ;i <= n;i++)
{
if(a[i] == )
{
dp[i][] = dp[i-][]+;
dp[i][] = dp[i-][];
}
else
{
dp[i][] = dp[i-][];
dp[i][] = max(dp[i-][],dp[i-][])+;
}
}
cout << max(dp[n][],dp[n][]) << endl;
return ;
}

B.枚举凑满了几个task。

#include<bits/stdc++.h>
using namespace std; int n,m,k,a[]; int main()
{
ios::sync_with_stdio();
cin >> n >> k >> m;
int sum = ;
for(int i = ;i <= k;i++)
{
cin >> a[i];
sum += a[i];
}
sort(a+,a++k);
int ans = ;
for(int i = ;i <= n;i++)
{
int cnt = n-i,left = m-sum*i,now = (k+)*i;
if(left < ) break;
for(int j = ;j <= k;j++)
{
if(left < a[j]*cnt)
{
now += min(cnt,left/a[j]);
break;
}
now += cnt;
left -= a[j]*cnt;
}
ans = max(ans,now);
}
cout << ans << endl;
return ;
}

C.预处理左右两个数的最大值,枚举中间那个点。

#include<bits/stdc++.h>
using namespace std; int n,l[],r[];
long long a[],sum[] = {},lm[],rm[]; long long f(int l,int r)
{
long long t1 = r == ?:sum[r-];
long long t2 = l == ?:sum[l-];
return t1-t2;
} int main()
{
ios::sync_with_stdio();
cin >> n;
for(int i = ;i < n;i++)
{
cin >> a[i];
sum[i] = sum[i-]+a[i];
}
for(int i = ;i <= n;i++)
{
int t;
long long maxx = -1e18;
for(int j = ;j <= i;j++)
{
if(f(,j)-f(j,i) > maxx)
{
maxx = f(,j)-f(j,i);
t = j;
}
}
l[i] = t;
lm[i] = maxx;
maxx = -1e18;
for(int j = i;j <= n;j++)
{
if(f(i,j)-f(j,n) > maxx)
{
maxx = f(i,j)-f(j,n);
t = j;
}
}
r[i] = t;
rm[i] = maxx;
}
long long maxx = -1e18;
int ans1,ans2,ans3;
for(int i = ;i <= n;i++)
{
if(lm[i]+rm[i] > maxx)
{
maxx = lm[i]+rm[i];
ans1 = l[i];
ans2 = i;
ans3 = r[i];
}
}
cout << ans1 << " " << ans2 << " " << ans3 << endl;
return ;
}

D.二分答案,二维前缀和判断。

#include<bits/stdc++.h>
using namespace std; int n,m,k,q,mp[][];
struct xx
{
int x,y,t;
friend bool operator<(xx a,xx b)
{
return a.t < b.t;
}
}a[]; bool ok(int t)
{
memset(mp,,sizeof(mp));
for(int i = ;i <= q && a[i].t <= t;i++) mp[a[i].x][a[i].y] = ;
for(int i = ;i <= n;i++)
{
for(int j = ;j <= m;j++) mp[i][j] += mp[i][j-]+mp[i-][j]-mp[i-][j-];
}
for(int i = ;i <= n-k+;i++)
{
for(int j = ;j <= m-k+;j++)
{
int endx = i+k-,endy = j+k-;
if(mp[endx][endy]-mp[i-][endy]-mp[endx][j-]+mp[i-][j-] == k*k) return ;
}
}
return ;
} int main()
{
ios::sync_with_stdio();
cin >> n >> m >> k >> q;
for(int i = ;i <= q;i++) cin >> a[i].x >> a[i].y >> a[i].t;
sort(a+,a++q);
int l = ,r = 1e9+;
while(l < r)
{
int mid = (l+r)/;
if(ok(mid)) r = mid;
else l = mid+;
}
if(l == 1e9+) cout << - << endl;
else cout << l << endl;
return ;
}

E.dfs从下到上处理每个点,注意超long long,负值太大直接NO。

#include<bits/stdc++.h>
using namespace std; int n,ok = ;
long long a[],b[];
struct xx
{
int to,k;
xx(int a,int b):to(a),k(b){};
};
vector<xx> v[]; void dfs(int now)
{
for(int i = ;i < v[now].size();i++)
{
int t = v[now][i].to,k = v[now][i].k;
dfs(t);
if(a[t] < )
{
if(1.0*a[t]*k+a[now] < -1e17) ok = ;
a[now] += a[t]*k;
}
else a[now] += a[t];
}
} int main()
{
ios::sync_with_stdio();
cin >> n;
for(int i = ;i <= n;i++) cin >> a[i];
for(int i = ;i <= n;i++) cin >> b[i],a[i] -= b[i];
for(int i = ;i <= n;i++)
{
int x,y;
cin >> x >> y;
v[x].push_back(xx(i,y));
}
dfs();
if(ok && a[] >= ) cout << "YES" << endl;
else cout << "NO" << endl;
return ;
}

F.记录每一个值的上一个位置,就容易计算每个点加入时增加的总价值。

#include<bits/stdc++.h>
using namespace std; int n,a[],la[] = {}; int main()
{
ios::sync_with_stdio();
cin >> n;
for(int i = ;i <= n;i++) cin >> a[i];
long long ans = ;
for(int i = ;i <= n;i++)
{
long long t1 = i-la[a[i]],t2 = n-i+;
ans += t1*t2;
la[a[i]] = i;
}
ans *= ;
ans -= n;
cout << fixed << setprecision() << 1.0*ans/n/n << endl;
return ;
}

Codeforces_846的更多相关文章

随机推荐

  1. docker 修改实例名称

    docker 容器(服务)重命名只要一个命令就可以: docker rename 原容器名 新容器名 如:

  2. 使用SqlDependency实时监听SQL server数据库变化并执行事件

    sql server设置:ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;语句让相应的数据库启用监听服务,以便支持SqlDependency ...

  3. 杂谈.netcore的Buffer相关新类型

    1 文章范围 本文将.netcore新出现的与Buffer操作相关的类型进行简单分析与讲解,由于资料有限,一些见解为个人见解,可能不是很准确.这些新类型将包括BinaryPrimitives.Span ...

  4. Netty快速入门(03)Java NIO 介绍-Buffer

    NIO 介绍 NIO,可以说是New IO,也可以说是non-blocking IO,具体怎么解释都可以. NIO 1是在JSR51里面定义的,在JDK1.4中引入,因为BolckingIO不支持高并 ...

  5. UGUI源码之Selectable

    Selectable是Button.InputField.Toggle.ScrollBar.Slider.Dropdown的基类. Selectable的继承的类与接口如下: public class ...

  6. 如何在ArcGIS中恢复注记文字

    文字标注是地图上一种特殊的视觉元素,可通过文字表达图形符号难以说明的地图内容,它与图形符号结合在一起存在于地图上,是关乎地图构图美的关键因素之一. MapGIS软件下子图对象和注释对象统统保存在点文件 ...

  7. 晨叔技术晨报: 你真的搞懂JS中的“值传递”和“引用传递”吗?

    晨叔周刊,每周一话题,技术天天涨. 本周的话题是JS的内存问题(加入本周话题,请点击传送门). 图 话题入口 今天的技术晨报来,就来谈谈JS中变量的,值传递和引用传递的问题.现在,对于很多的JSer来 ...

  8. map文件分析

    1.MAP文件基本概念 段(section):描述映像文件的代码和数据块 RO:Read-Only的缩写,包括RO-data(只读数据)和RO-code(代码) RW:Read-Write的缩写,主要 ...

  9. 固定表头的table

    在前端的开发过程中,表格时经常使用的一种展现形式.在我的开发过程中,当数据过多时,最常用的一种方式就是分页,但是有些地方还是需要滚动.通常的table 会随着滚动,导致表头看不见.一下是我找到的一种固 ...

  10. Tarjin + 缩点

    链接:https://www.nowcoder.com/acm/contest/81/C来源:牛客网 题目描述 给出一个 0 ≤ N ≤ 105 点数.0 ≤ M ≤ 105 边数的有向图, 输出一个 ...