首页 > 其他分享 >ABC286 A-E题解

ABC286 A-E题解

时间:2023-01-21 22:22:06浏览次数:79  
标签:const 题意 int 题解 read ABC286 main inf

题目

虽然是大年三十,但是玩手机没写题有意思。从 50 分钟才开始看题。

A

题意:将数组中 \([p,q]\) 与 \([r,s]\) 的元素交换并输出。
sbt。

B

大意:将字符中的 na 换成 nya
sbt。

C

题意:两种操作,将第一个元素换到最后花费 \(A\),任意改变一个元素,花费 \(B\)。求将其变成回文串的最小花费。

猜了个结论,一操作只会在一开始做。于是就枚举一操作做几次,然后暴力扫一遍要改几个。

const int N=1e6+7,inf=1e18;
char c[N],s[N];
main(){
  int n,A,B,ans=inf;read(n);read(A);read(B);
  scanf("%s",c+1);
  for(int i=0;i<=n;i++){
    int res=i*A;
    for(int j=1;j<=n-i;j++)
      s[j]=c[i+j];
    for(int j=n-i+1,k=1;j<=n;j++,k++)s[j]=c[k];
    for(int j=1;j<=n-j+1;j++)
      if(s[j]!=s[n-j+1])res+=B;
    ans=min(ans,res);
  }
  cout<<ans;
  return 0;
}

D

题意:有 \(n\) 种硬币,第 \(i\) 种面值 \(a_i\) 元有 \(b_i\) 个,问能否凑出 \(x\) 元。

经典凑数字题,\(f_{i,j}\) 表示前 \(i\) 种硬币能否凑出 \(j\) 元,转移就是 \(f_{i,j}|=f_{i-1,j-ka_i}(0\le k \le b_i 且 j-ka_i\ge 0)\),第一维需要滚掉。

const int N=1e6+7,inf=1e18,M=5e7+7;
bool f[M];
int a[N],b[N];
main(){
  int n,x;read(n);read(x);
  for(int i=1;i<=n;i++)read(a[i]),read(b[i]);
  f[0]=1;
  for(int i=1;i<=n;i++)for(int j=x;j>=0;j--)for(int k=0;k<=b[i];k++)
    if(j-a[i]*k>=0)f[j]|=f[j-a[i]*k];
  puts(f[x]?"Yes":"No");
  return 0;
}

E

题意:给定一个图,每个点有点权,多次询问 \(s\) 到 \(t\) 的最短路中经过点权和最大的那一种。

类似最短路计数,在 Floyd 的基础上定义 \(f_{i,j}\) 表示 \(i\) 到 \(j\) 的最短路中最大的点权和,初始化 \(f_{i,i}=a_i\),若 \((i,j)\) 有边,则 \(f_{i,j}=a_i+a_j\)。转移就是跑 Floyd 时加一个相等时的判断。

const int N=307,inf=1e9+7;
int dis[N][N],a[N],f[N][N];
char c[N];
main(){
  int n;read(n);
  for(int i=1;i<=n;i++)read(a[i]),f[i][i]=a[i];
  for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)dis[i][j]=inf;
  for(int i=1;i<=n;i++){
    scanf("%s",c+1);
    for(int j=1;j<=n;j++)
      if(c[j]=='Y')dis[i][j]=1,f[i][j]=f[i][i]+f[j][j];
  }
  for(int k=1;k<=n;k++)
  for(int i=1;i<=n;i++)
  for(int j=1;j<=n;j++){
    if(dis[i][k]+dis[k][j]<dis[i][j])
      dis[i][j]=dis[i][k]+dis[k][j],f[i][j]=f[i][k]+f[k][j]-a[k];//多算一个 a[k],下面同理。
    else if(dis[i][k]+dis[k][j]==dis[i][j])
      f[i][j]=max(f[i][j],f[i][k]+f[k][j]-a[k]);
  }
  int q;read(q);
  while(q--){
    int x,y;
    read(x);read(y);
    if(dis[x][y]==inf){puts("Impossible");continue;}
    printf("%lld %lld\n",dis[x][y],f[x][y]);
  }
  return 0;
}

标签:const,题意,int,题解,read,ABC286,main,inf
From: https://www.cnblogs.com/LAK666/p/17064064.html

相关文章

  • AcWing 第87场周赛题解
    T1移动棋子算出为\(1\)的点离\((3,3)\)的距离即可。#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;intmain(){int......
  • LeetCode.面试题02.05-链表求和-题解分析
    题目来源面试题02.05.链表求和题目详情给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并......
  • Codeforces Round48 Edu题解
    A-DeathNote(模拟)题意​ 现在有一本书,每页可以写下\(m\)个数字,给你一个序列\(a\),依次在书上誊写\(a_i\)个数字,请问誊写序列的第\(i\)个数的时候书翻了几页?​ ......
  • HGAME 2023 Week2 Pwn YukkuriSay题解
    HGAME2023Week2PwnYukkuriSay题解检查保护:拿到文件先checksec一下:64位程序,开启canary和nx保护,没有开启PIE(可以使用绝对地址了)继续往下看,先不着急打开ida,我们先运......
  • GoodBye Renyin ABC题解
    GoodByeRenyinABC题解A答案为\(\text{YES}\)的充要条件是\(\max(a_i)\timesr\le(\suma_i-\max(a_i))\timesR\)。必要性显然。充分性是可以先把最大的放在\((......
  • 博客园美化及markdown代码问题解决
    博客园美化Cnblogs-Theme-SimpleMemory代码出处GitHub-BNDong/Cnblogs-Theme-SimpleMemoryatv1.2.6说明文档:简介-Document(bndong.github.io)如果无法进入网站,......
  • Deque 题解
    题目传送门一道区间\(dp\)题。在\(dp\)之前,我们需要明确以下几个东西:状态的表示,状态转移方程,边界条件跟答案的表示。状态的表示定义\(sum(l,r)=\sum_{i=l}^ra_......
  • 1538 迎春舞会之数字舞蹈 题解
    #include<iostream>intmain(){/**#Seven-segmentDisplay**Thewayhowtheprogramprintsdecimalnumericstotheconsoleworks......
  • CF225 Round #139 题解
    比赛链接:https://codeforces.com/contest/225题解:A题意题//bySkyRainWind#include<bits/stdc++.h>#definemprmake_pair#definedebug()cerr<<"Yoshino\n"#de......
  • 题解 ABC231D【Neighbors】
    首先,每个数不能有超过两个相邻元素,不然无法构成一条链。可以通过记录每个数出现次数(度数)来判断。其次,给的信息不能成环,不然也无法构成一条链。可以通过并查集来判断。在......