#include<cstdio>#include<iostream>#include<cmath>#define int long long#define RI register int#define CI const int&usingnamespace std;
constint N=100005;
int n,k,a[N],pfx[N];
signedmain(){
RI i; for (scanf("%lld%lld",&n,&k),i=1;i<=n;++i)
scanf("%lld",&a[i]),pfx[i]=pfx[i-1]+a[i];
for (i=k;i<=n;++i)
{
int sum=pfx[i]-pfx[i-k];
if (sum<1024LL*k)
{
int tmp=floor((longdouble)(sum)*100/k);
printf("%lld.",tmp/100); tmp%=100;
printf("%lld%lld KiBps\n",tmp/10,tmp%10);
} else {
int tmp=floor((longdouble)(sum)*100/k/1024);
printf("%lld.",tmp/100); tmp%=100;
printf("%lld%lld MiBps\n",tmp/10,tmp%10);
}
}
return0;
}
#include<cstdio>#include<iostream>#include<queue>#include<cstring>#define RI register int#define CI const int&usingnamespace std;
constint N=205,INF=1e9;
int t,n,tp,x,f[N][N][N];
intmain(){
for (scanf("%d",&t);t;--t)
{
RI i,j,k; scanf("%d",&n);
for (i=0;i<=n;++i) for (j=0;j<=n;++j) for (k=0;k<=n;++k) f[i][j][k]=-INF;
for (f[0][0][0]=i=0;i<n;++i)
{
if (scanf("%d",&tp),tp==1)
{
for (scanf("%d",&x),j=0;j<=i;++j) for (k=0;j+k<=i;++k)
if (f[i][j][k]!=-INF)
{
f[i+1][j][k]=max(f[i+1][j][k],f[i][j][k]);
f[i+1][j+1][k]=max(f[i+1][j+1][k],f[i][j][k]+x-(x+9)/10);
f[i+1][j][k+1]=max(f[i+1][j][k+1],f[i][j][k]+x);
}
} else {
for (j=0;j<=i;++j) for (k=0;j+k<=i;++k)
if (f[i][j][k]!=-INF)
{
f[i+1][max(0,j-1)][max(0,k-1)]=max(f[i+1][max(0,j-1)][max(0,k-1)],f[i][j][k]);
f[i+1][max(0,j-1)][max(0,k-2)]=max(f[i+1][max(0,j-1)][max(0,k-2)],f[i][j][k]-1);
}
}
}
printf("%d\n",f[n][0][0]);
}
return0;
}
网络流的做法也比较经典,但比赛的时候没仔细想,赛后看了眼Tutorial的建图感觉还是挺经典的
#include<cstdio>#include<iostream>#include<queue>#include<cstring>#define RI register int#define CI const int&usingnamespace std;
constint N=205,INF=1e9;
int T,n,tp,idx,sum,x;
namespace MinCost_MaxFlow
{
constint NN=1005;
structedge {
int to,nxt,v,c;
}e[1000005]; int head[NN],cur[NN],s,t,cnt=1,dis[NN]; bool vis[NN];
inlinevoidaddedge(CI x,CI y,CI v,CI c){
//printf("%d %d %d %d\n",x,y,v,c); e[++cnt]=(edge){y,head[x],v,c}; head[x]=cnt;
e[++cnt]=(edge){x,head[y],0,-c}; head[y]=cnt;
}
#define to e[i].toinlineboolSPFA(CI s,CI t){
RI i; for (i=1;i<=idx;++i) dis[i]=INF; dis[s]=0;
queue <int> q=queue <int>(); q.push(s);
while (!q.empty())
{
int now=q.front(); q.pop(); vis[now]=0;
for (i=head[now];i;i=e[i].nxt)
if (e[i].v&&dis[now]+e[i].c<dis[to])
if (dis[to]=dis[now]+e[i].c,!vis[to]) q.push(to),vis[to]=1;
}
return dis[t]!=INF;
}
inlineintDFS(CI now,CI tar,int tmp,int& flow,int& cost){
if (now==tar) return flow+=tmp,tmp;
int ret=0; vis[now]=1;
for (RI& i=cur[now];i&&dis;i=e[i].nxt)
if (!vis[to]&&e[i].v&&dis[to]==dis[now]+e[i].c)
{
int dist=DFS(to,tar,min(tmp-ret,e[i].v),flow,cost);
ret+=dist; e[i].v-=dist; e[i^1].v+=dist; cost+=dist*e[i].c;
if (ret==tmp) break;
}
vis[now]=0; return ret;
}
#undef toinlinevoidDinic(CI s,CI t,int& flow,int& cost){
flow=cost=0; while (SPFA(s,t)) memcpy(cur,head,idx+1<<2),DFS(s,t,INF,flow,cost);
}
inlinevoidclear(void){
for (RI i=1;i<=idx;++i) head[i]=0; cnt=1;
}
};
usingnamespace MinCost_MaxFlow;
intmain(){
for (scanf("%d",&T);T;--T)
{
RI i,j; scanf("%d",&n); s=1; t=2; sum=0;
auto ID=[&](CI x,CI y)
{
return (x-1)*3+y+2;
};
for (idx=ID(n,3),i=1;i<=n;++i)
{
if (i!=n)
{
for (j=1;j<=3;++j) addedge(ID(i,j),ID(i+1,j),INF,0);
}
if (scanf("%d",&tp),tp==1)
{
scanf("%d",&x); sum+=x;
++idx; addedge(s,idx,1,0);
addedge(idx,ID(i,1),1,1);
addedge(idx,ID(i,2),1,(x+9)/10);
addedge(idx,ID(i,3),1,0);
addedge(idx,t,1,x);
} else {
for (j=1;j<=3;++j) addedge(ID(i,j),t,1,0);
}
}
int flow,cost; Dinic(s,t,flow,cost);
printf("%d\n",sum-cost); clear();
}
return0;
}
10|0I. Integer Reaction
很套路的题,最小值最大一眼二分答案lim,考虑如何检验
用两个multiset分别存储当前两种颜色还未发生反应的集合,对于一个新元素x:
若不存在与它颜色相反的元素,则将其加入它对应颜色的multiset中
若存在与它颜色相反的元素,则尝试找到最小的y满足x+y≥lim,即等价于查询lim−x的后继
总复杂度O(nlognlogai)
#include<cstdio>#include<iostream>#include<set>#define RI register int#define CI const int&usingnamespace std;
constint N=100005;
int n,a[N],c[N];
inlineboolcheck(CI x){
multiset <int> s[2];
for (RI i=1;i<=n;++i)
{
if (s[c[i]^1].empty())
{
s[c[i]].insert(a[i]); continue;
}
auto it=s[c[i]^1].lower_bound(x-a[i]);
if (it==s[c[i]^1].end()) return0;
s[c[i]^1].erase(it);
}
return1;
}
intmain(){
RI i; for (scanf("%d",&n),i=1;i<=n;++i) scanf("%d",&a[i]);
for (i=1;i<=n;++i) scanf("%d",&c[i]);
int l=1,r=2e8,mid,ret; while (l<=r)
if (check(mid=l+r>>1)) ret=mid,l=mid+1; else r=mid-1;
printf("%d\n",ret);
return0;
}
#include<cstdio>#include<iostream>#include<vector>#include<utility>#include<cstring>#define RI register int#define CI const int&usingnamespace std;
typedef pair <int,int> pi;
constint N=(1<<18)+5;
int n,m,a[20][20],c[20],t[20],cs[20],f[20][N],g[20][N];
vector <int> vec[N],valid[20];
inlinevoidDFS1(vector <int>& v,CI cur,CI mask){
if (cur>=m) return v.push_back(mask);
if (t[cur]!=-1) return cs[cur]=t[cur],DFS1(v,cur+1,mask);
if (cur>0&&c[cur-1]==1&&cs[cur-1]==1)
return cs[cur]=0,DFS1(v,cur+1,mask);
if (cur>0&&cs[cur-1]==1&&c[cur]==1)
return cs[cur]=0,DFS1(v,cur+1,mask);
cs[cur]=0; DFS1(v,cur+1,mask);
cs[cur]=1; DFS1(v,cur+1,mask|(1<<cur));
}
inlinevoidDFS2(CI rid,CI cur,CI mask,CI sum){
if (cur>=m) return (void)(valid[rid].push_back(mask),g[rid][mask]=sum);
if (a[rid][cur]<=0) returnDFS2(rid,cur+1,mask,sum);
DFS2(rid,cur+1,mask,sum);
DFS2(rid,cur+1,mask|(1<<cur),sum+a[rid][cur]);
}
intmain(){
RI i,j; for (scanf("%d%d",&n,&m),i=0;i<n;++i)
for (j=0;j<m;++j) scanf("%d",&a[i][j]);
for (i=0;i<(1<<m);++i)
{
for (j=0;j<m;++j) c[j]=(i>>j)&1,t[j]=-1;
for (j=0;j<m;++j)
if (c[j]&&((j>0&&c[j-1])||(j<m-1&&c[j+1]))) t[j]=0;
DFS1(vec[i],0,0);
}
/*int all=0; for (i=0;i<(1<<m);++i)
{
all+=vec[i].size();
for (auto x:vec[i]) printf("%d %d\n",i,x);
}
printf("%d\n",all);*/memset(g,-1,sizeof(g));
for (i=0;i<n;++i) DFS2(i,0,0,0);
memset(f,-1,sizeof(f));
for (auto mask:valid[0]) f[0][mask]=g[0][mask];
for (i=0;i<n-1;++i)
for (auto mask:valid[i]) if (~f[i][mask])
for (auto nxt:vec[mask]) if (~g[i+1][nxt])
f[i+1][nxt]=max(f[i+1][nxt],f[i][mask]+g[i+1][nxt]);
int ans=0; for (auto mask:valid[n-1]) ans=max(ans,f[n-1][mask]);
returnprintf("%d",ans),0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2018-05-13 Tarjan&&缩点简析