A - Takahashi san 2

直接判断字符串是否以san结尾即可。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
int n=s.size();
if(s[n-1]=='n'&&s[n-2]=='a'&&s[n-3]=='s') cout<<"Yes";
else cout<<"No";
return 0;
}

B - Unvarnished Report

用特殊符号将两个字符串补到相同长度,然后逐位判断即可。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
string s,t;
int main(){
cin>>s>>t;
int n=max(s.size(),t.size());
s.resize(n,'*'),t.resize(n,'*');
if(s==t) cout<<"0\n";
else{
for(int i=0;i<n;i++){
if(s[i]!=t[i]){
cout<<i+1<<"\n";
break;
}
}
}
return 0;
}

C - Separated Lunch

\(2^N\)枚举哪些人分配到A组即可,剩下人分到B组。

点击查看代码
#include<bits/stdc++.h>
#define N 30
#define int long long
using namespace std;
int n,a[N],ans=LLONG_MAX;
signed main(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=(1<<n)-1;i>=0;i--){
int cnta=0,cntb=0;
for(int j=0;j<n;j++){
if(i&(1<<j)) cnta+=a[j];
else cntb+=a[j];
}
ans=min(ans,max(cnta,cntb));
}
cout<<ans;
return 0;
}

D - Laser Marking

先\(n!\)暴力枚举打印顺序,然后再\(2^n\)枚举每条线段起始端点。然后就以\(O(2^n\times n!)\)的优秀(大嘘)时间复杂度通过了

嘛,反正是暴搜题,能过就行(^^;

此题也有\(O(n^2\times 2^n)\)的做法,见https://atcoder.jp/contests/abc374/editorial/11105,如果有空会回来补这种做法的。

点击查看代码
#include<bits/stdc++.h>
#define N 10
#define int long long
using namespace std;
int n,s,t,sx[N],sy[N],tx[N],ty[N],tmp[N];
double ans=1e18;
double dist(int sx,int sy,int tx,int ty){
int x=sx-tx,y=sy-ty;
return sqrt(x*x+y*y);
}
double solve(){
int x=0,y=0;
double ans=0;
for(int ti=0;ti<n;ti++){
int i=tmp[ti];
ans+=dist(x,y,sx[i],sy[i])/(1.0*s);
ans+=dist(sx[i],sy[i],tx[i],ty[i])/(1.0*t);
x=tx[i],y=ty[i];
}
return ans;
}
signed main(){
cin>>n>>s>>t;
for(int i=0;i<n;i++){
cin>>sx[i]>>sy[i]>>tx[i]>>ty[i];
}
for(int i=0;i<n;i++) tmp[i]=i;
do{
for(int i=(1<<n)-1;i>=0;i--){
for(int j=0;j<n;j++){
if((1<<j)&i){
swap(tx[j],sx[j]);
swap(ty[j],sy[j]);
}
}
ans=min(ans,solve());
for(int j=0;j<n;j++){
if((1<<j)&i){
swap(tx[j],sx[j]);
swap(ty[j],sy[j]);
}
}
}
}while(next_permutation(tmp,tmp+n));
cout<<fixed<<setprecision(10)<<ans<<"\n";
return 0;
}

E - Sensor Optimization Dilemma 2

看到需要最大化最小值,于是考虑二分答案\(ans\),判断使得每个工序的生产能力都达到\(ans\)以上所需要付出的最小钱数是否在\(X\)以内。

难点在于计算当前工序达到\(ans\)的生产能力所需要的最小钱数,如果和背包一样,用\(f[i][j]\)表示正在考虑第\(i\)台机器,达到\(j\)的生产能力所需要的最少钱数,处理每个工序时间复杂度将是\(O(V)\),其中\(V\)与\(A\times X=10^9\)同阶,表示答案的值域;即使交换键值,处理每个工序的时间复杂度也会达到\(O(X)\),总时间复杂度\(O(nX\log V)\),无法通过。

我们可以直接枚举\(S\)机器的个数,有一个结论,假设\(S\)是成本较高的那台机器,那么只需要枚举\(S\)的台数从\(0\)到\(\frac{D}{A}-1\),其中\(D=\text{lcm}(A,B)\)。理解起来不难,先把\(ans\)中整的\(D\)全用成本较低的机器达成,对于剩余的零头,再枚举用多少台成本较高的机器。这一步的时间复杂度和\(A\)、\(B\)是同阶的。

代码为了方便直接设\(D=A\times B\),也没判断哪个机器成本更低,用\(2\)次循环把\(S,T\)都枚举了一遍(只是因为懒而已)。不影响复杂度:\(O(nA\log V)\)。

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define N 110
using namespace std;
int n,x,a[N],b[N],p[N],q[N];
bool check(int w){
int ans=0;
for(int i=1;i<=n;i++){
int money=LLONG_MAX;//j是S的个数,k是T的个数
for(int j=0;j<=b[i]&&j*a[i]<=w;j++){
int k=(w-j*a[i]+b[i]-1)/b[i];
money=min(money,j*p[i]+k*q[i]);
}
for(int k=0;k<=a[i]&&k*b[i]<=w;k++){
int j=(w-k*b[i]+a[i]-1)/a[i];
money=min(money,j*p[i]+k*q[i]);
}
ans+=money;
if(ans>x) return 0;
}
return 1;
}
signed main(){
cin>>n>>x;
for(int i=1;i<=n;i++) cin>>a[i]>>p[i]>>b[i]>>q[i];
int l=0,r=1e9;
while(l<r){
int mid=(l+r+1)>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
cout<<l;
return 0;
}

[题解]ABC374 A~E的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. Leangoo助力医药行业项目降本增效

    医药行业痛点诸多,制药研发周期长.生物技术创新协同难.医疗器械研发生产衔接不畅.医疗保健服务流程繁琐.Leangoo 可化解困境,促各领域信息共享.流程优化.协同增效,提升效率与质量,推动医药行业整体 ...

  2. 【2020.11.25提高组模拟】树的解构(deconstruct) 题解

    [2020.11.25提高组模拟]树的解构(deconstruct) 题解 题目描述 给一棵以\(1\)为根的外向树,进行\((n-1)\)次删边操作,每次都会从没有删掉的边中等概率地删掉一条边\(a ...

  3. 【2020.11.19提高组模拟】二次剩余two 题解

    [2020.11.19提高组模拟]二次剩余two 题解 题目描述 有\(n\)个二次函数,每个二次函数可以用两个值\(m,k\)描述: \[f(x)=(x-m)^2+k \] 现在有\(q\)次操作: ...

  4. elasticsearch RestHighLevelClient 关于document的常用操作 ---------- 查询篇

    在es中查询大致分为两类:普通查询.复杂查询. 普通查询只需要使用:GetRequest即可 复杂查询涉及很多: SearchSourceBuilder(用于指定搜索条件时的附加条件:排序.分页.查询 ...

  5. 手把手教你网络爬虫(爬取豆瓣电影top250,附带源代码)

    概念 网络爬虫就是按照一定的规则,自动抓取互联网信息的程序或脚本.其本质就是模拟浏览器打开网页,获取网页中我们需要的数据. 基本流程 准备工作(构建流程) 获取数据 解析内容 保存数据 1. 准备工作 ...

  6. Squid代理配置使用

    1.Squid简单说明 Squid Cache(简称为Squid)是HTTP代理服务器软件.Squid用途广泛,可以作为缓存服务器,可以过滤流量帮助网络安全,也可以作为代理服务器链中的一环,向上级代理 ...

  7. 了解php当中简单的单例模式

    本文由 ChatMoney团队出品 单例模式是一种常用的设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例.在 PHP 中实现单例模式通常有三种形式:饿汉式(Eager ...

  8. SpringBooot3.4集成Swagger knife4j-openapi3 Knife4j文档请求异常

    ## Pom引入 SpringBooot3.4的版本 <dependency> <groupId>com.github.xiaoymin</groupId> < ...

  9. TypeScript 类型判断

    多谢大哥的指教. https://www.wenjiangs.com/doc/typescript-typeguard instanceof instanceof 与 typeof 类似,区别在于 t ...

  10. C# LoggingHelp 自定义记录日志帮助类

    public class LoggingHelper    {        /// <summary>        /// 获取文件路径        /// </summary ...