Codeforces Round 982 (Div. 2)
Codeforces Round 982 (Div. 2) 总结
A
猜结论,最后的图形的周长都能移成一个长方形的周长,这个长方形就是
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;
const int N=1;
int n;
int w,h;
int x,y;
void solve()
{
x=y=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>w>>h;
x=max(x,w),y=max(y,h);
}
cout<<2*(x+y)<<'\n';
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int T;
cin>>T;
while(T--) solve();
return 0;
}
B
首先,Stalin Sort 后的结果是会产生单调不下降。对于
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;
const int N=2005;
int n;
int a[N];
void solve()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int ans=n;
for(int i=1;i<=n;i++)
{
int cnt=i-1;
for(int j=i+1;j<=n;j++) cnt+=(a[j]>a[i]);
ans=min(ans,cnt);
}
cout<<ans<<'\n';
}
int main ()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int T;
cin>>T;
while(T--) solve();
return 0;
}
C
转化一下条件,若有
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;
const int N=3e5+5;
int n;
ll a[N];
ll ans;
typedef pair<ll,int> PLI;
PLI b[N];
#define fi first
#define se second
map<ll,bool> H;
void dfs(ll siz)
{
if(H.count(siz)) return ;
H[siz]=1;
ans=max(ans,siz);
if(siz>b[n].fi) return ;
PLI tmp={siz,0};
int l=lower_bound(b+1,b+n+1,tmp)-b;
tmp.se=n;
int r=upper_bound(b+1,b+n+1,tmp)-b-1;
for(int i=l;i<=r;i++)
{
if(b[i].se==0) continue;
dfs(siz+b[i].se);
}
}
void solve()
{
H.clear();
cin>>n;
ans=n;
for(int i=1;i<=n;i++) cin>>a[i],b[i]={a[i]+i-1,i-1};
sort(b+1,b+n+1);
dfs(n);
cout<<ans<<'\n';
}
int main ()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int T;
cin>>T;
while(T--) solve();
return 0;
}
D1
观察到诡异的数据范围
考虑 dp。设
- 操作一:
不变, 变为 ,则有 。 - 操作二:查找第一个位置
满足 ,则有 。
答案就是
然后因为
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;
const int N=3e5+5;
const ll inf=1e18;
int n,m;
ll a[N],b[N];
ll f[2][N];
ll ans=inf;
void solve()
{
ans=inf;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i],a[i]+=a[i-1];
for(int i=1;i<=m;i++) cin>>b[i];
for(int j=1;j<=n+1;j++) f[1][j]=inf;
f[1][1]=0;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n+1;j++) f[i+1&1][j]=inf;
for(int j=1;j<=n;j++)
{
int k=upper_bound(a+j,a+n+1,b[i]+a[j-1])-a;
if(k>j) f[i&1][k]=min(f[i&1][k],f[i&1][j]+m-i);
f[i+1&1][j]=min(f[i+1&1][j],f[i&1][j]);
}
ans=min(ans,f[i&1][n+1]);
}
cout<<(ans==inf ? -1 : ans)<<'\n';
}
int main ()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int T;
cin>>T;
while(T--) solve();
return 0;
}
分类:
codeforces总结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律