トヨタ自動車プログラミングコンテスト2024#7(ABC 362)
非常好名次,使我的 \(1\) 旋转
四发罚时应该是这次比赛最唐的东西了,没有就进前一千了
A.Buy a Pen
特判秒了,懒得打三种 ans=,所以就把不能选的那个赋值成无穷大了
#include<bits/stdc++.h>
using namespace std;
#define speed ios::sync_with_stdio(false);
#define tests int cases;cin>>cases;while(cases--)
int main(){
speed
int a,b,c;
cin>>a>>b>>c;
string x;
cin>>x;
if(x=="Red") a=101;
if(x=="Green") b=101;
if(x=="Blue") c=101;
cout<<min({a,b,c})<<endl;
}
B.Right Triangle
讲个好玩的,这个题需要求两点 \((x_1,y_1),(x_2,y_2)\) 之间的坐标,然后我先是写了个这个
dis[1]=sqrt(x[1]*x[1]+y[1]*y[1]);
后面求勾股定理的时候发现好像不对,这好像是勾股定理,所以改成下面这样:
dis[1]=sqrt((x[1]-x[2])*(y[1]-y[2]));
这玩意 re 了,我也没干别的,唯一想到的就是给负数开根了,一看果然是负的...
#include<bits/stdc++.h>
using namespace std;
#define speed ios::sync_with_stdio(false);
#define tests int cases;cin>>cases;while(cases--)
const double eps=1e-8;
int main(){
speed
int x[4],y[4];
cin>>x[1]>>y[1]>>x[2]>>y[2]>>x[3]>>y[3];
double dis[4];
dis[1]=sqrt((x[1]-x[2])*(x[1]-x[2])+(y[1]-y[2])*(y[1]-y[2]));
dis[2]=sqrt((x[2]-x[3])*(x[2]-x[3])+(y[2]-y[3])*(y[2]-y[3]));
dis[3]=sqrt((x[3]-x[1])*(x[3]-x[1])+(y[3]-y[1])*(y[3]-y[1]));
// cout<<dis[1]<<" "<<dis[2]<<" "<<dis[3]<<endl;
if(dis[3]<dis[1]) swap(dis[3],dis[1]);
if(dis[3]<dis[2]) swap(dis[3],dis[2]);
if(abs(dis[1]*dis[1]+dis[2]*dis[2]-dis[3]*dis[3])<=eps) cout<<"Yes"<<endl;
else cout<<"No"<<endl;'
}
还有一个就是 eps 的问题,这个题刻意卡了直接判等,handmade 测试点会全 WA,不过我恰好改一次都改对了,所以没吃第二发罚时
C.Sum = 0
稍微有点意思,首先算出所有左边界的和,再算出所有右边界的和,注意到左边界一定是最小的和,而右边界一定是最大的,因此有解的充要条件应为 \(min\le 0,max\ge 0\)
然后就再扫一遍,从最大的和中减掉(每次都改一个右边界为左边界),如果当前最大和减不动了,那就把它减到 \(0\) 输出,后面的正常输出右边界即可.
#include<bits/stdc++.h>
using namespace std;
#define speed ios::sync_with_stdio(false);
#define tests int cases;cin>>cases;while(cases--)
const double eps=1e-8;
#define int long long
int n;
int l[200001],r[200001];
int maxn,minn;
signed main(){
speed cin>>n;
for(int i=1;i<=n;++i){
cin>>l[i]>>r[i];
maxn+=r[i];
minn+=l[i];
}
if(maxn<0 or minn>0){
cout<<"No"<<endl;
return 0;
}
cout<<"Yes"<<endl;
for(int i=1;i<=n;++i){
if(maxn>0){
if(maxn>=(r[i]-l[i])){
maxn-=r[i]-l[i];
cout<<l[i]<<" ";
}
else{
cout<<r[i]-maxn<<" ";
maxn=0;
}
}
else if(maxn==0){
cout<<r[i]<<" ";
}
}
}
D.Shortest Path 3
DIJ 版本的考试题,和我考试打的那份错解一个思路
#include<bits/stdc++.h>
using namespace std;
#define int long long
int cnt;
int n,m,x;
int a[500000];
struct shabicth{
int q,dat;
bool operator < (const shabicth &a) const{
return dat>a.dat;
}
};
struct node{
int to,w,next;
}edge[600000];
int head[200010];
bool f[200100];
int dis[200010];
int sum[2000];
int sbcth[7000][3];
void add(int u,int v,int w){
edge[++cnt].next=head[u];
edge[cnt].to=v;
edge[cnt].w=w;
head[u]=cnt;
}
void dij(int s){
priority_queue<shabicth> qq;
int x,y;
shabicth cc;
cc.q=s;
cc.dat=a[s];
qq.push(cc);
memset(dis,0x7f,sizeof(dis));
memset(f,0,sizeof(f));
dis[s]=a[s];
while(!qq.empty()){
x=qq.top().q;
y=qq.top().dat;
qq.pop();
if(!f[x]){
f[x]=true;
for(int i=head[x];i;i=edge[i].next){
cc.q=edge[i].to;
if(!f[cc.q]&&dis[cc.q]>y+edge[i].w+a[cc.q]){
dis[cc.q]=y+edge[i].w+a[cc.q];
cc.dat=dis[cc.q];
qq.push(cc);
}
}
}
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
dis[i]=a[i];
}
for(int i=1;i<=m;i++){
int x,y,num;
cin>>x>>y>>num;
add(x,y,num);
add(y,x,num);
}
dij(1);
for(int i=2;i<=n;i++) cout<<dis[i]<<' ';
}
E.Count Arithmetic Subsequences
窝太菜辽,想了半条才明白 Arithmetic Subsequences 是等差数列的意思
日文阅读理解
上の解法は更に高速化することができます.以下の状態を持つ DP を考えます.
\(dp[i][l][d]=\) 初項 \(A_i\),長さ \(l(l≥2)\),公差 \(d\) であるような等差数列の個数
\(i\) の降順に見ていき,初項 \(A_i\) を固定します.第 \(2\) 項 \(A_j\ (i<j)\) と長さ \(l\) を全探索します.このとき,公差は \(d=A_j−A_i\) と定まります. \(l=2\) の場合は (\(A_i,A_j\) ) が長さ \(2\) の等差数列なので, \(dp[i][2][d]\) に \(1\) を足します. \(l≥3\) の場合,初項 \(A_i\) ,長さ \(l\),公差 \(d\) の等差数列は,初項 \(A_j\) ,長さ \(l−1\),公差 \(d\) の等差数列の先頭に \(A_i\) を追加したものとなっています.よって, \(dp[i][l][d]\) に \(dp[j][l−1][d]\) を足します.
公差 \(d\) は \(10^9\) 程度の大きな値を取りうるため,\(d\) に関する添字は連想配列で持てばよいです.C++ で map を使用した場合,時間計算量は \(O(N^3logN)\) となります.
または,各 \(i\) についてあり得る公差をあらかじめ列挙して座標圧縮しておけば,\(d\) に関する添字を配列で持つことができます.この場合,時間計算量は \(O(N^3)\) です.
没用翻译读懂了,大概就是开一个 DP 记录出项,长度,公差三个参数,这样就能唯一确定一个等差数列,再用 map 判重.
赛时差不多打出来了,因为这个题 \(n\) 只有 \(80\),赛时打的时候我是考虑枚举等差数列前两项,然后利用公差扫一遍后面的数,统计答案就行了.
此外 \(ans_{1}=n,ans_{2}=\frac{n\times (n-1)}{2}\)
G.Count Substring Query
没想到考了 AC 自动机板子题,板子不会打就偷了一份
后记
谴责一款强迫我看日文题解的网站
トヨタ自動車プログラミングコンテスト2024#7(ABC 362)的更多相关文章
- 【日语】日语单词N3_N4_N5
日语单词N3_N4_N5 单 词 讲 解 あ行单词 ああ:0[副]那样.那种 例句:ああ言うことはしないほうがいい.那样的事情最好不做. 電車の窓からごみを棄てているああ言うことはしないほうがいい. ...
- 日语单词N3_N4_N5
单 词 讲 解 あ行单词 ああ:0[副]那样.那种 例句:ああ言うことはしないほうがいい.那样的事情最好不做. 電車の窓からごみを棄てているああ言うことはしないほうがいい. 挨拶(あいさつ):① 寒暄 ...
- Universal Asynchronous Receiver/Transmitter
USART簡介與特性 NRZ標準資料格式(Mark/Space) 半雙工/全雙工 Synchronous 同步傳輸 CLOCK SKEW Asynchronous 非同步傳輸 半/全雙工.同步/非同步 ...
- PMP用语集
AC actual cost 实际成本 ACWP actual cost of work performed 已完工作实际成本 BAC budget at completion 完工预算 BCWP b ...
- Rong's Portfolio
車架貼標設計 Velocite SYN frame decals 以簡潔設計的原則,分別依公路車.登山車.電動車的屬性設計表面塗裝曲線,針對車架特殊造型設計貼標突顯其功能,並搭配品牌基本色與市場偏好色 ...
- Python 基礎 - 元組與簡易購物車實做
tuple(元組) 其實跟列表差不多,也是存一組數,只不過是它一旦建立了,就不能修改了,只能做 切片 跟 查詢,所以只叫 只讀列表 語法: name = ("Rogers", &q ...
- LED驅動電路概述
LED是一種固體光源,當它兩端加上正向電壓,半導體中的少數載流子和多數載流子發生復合,放出的過剩能量將引起光子發射.采用不同的材料,可制成不同顏色有 發光二極管 . 隨著對LED研究的進一步深入,其光 ...
- PID控制動手玩玩看
PID控制動手玩玩看 PID三個參數到底該怎麼調才好,真的是一門藝術. 雖然在Marlin韌體內有提供自動測量的功能,但是測得的結果,不見得能令人滿意,還是需要調整.可是到底該怎麼調整?從哪個參數開始 ...
- Word 中的橫式格式方程式和數學自動校正
以橫式格式輸入方程式 您可以使用數學自動校正程式碼,迅速輸入大多數的方程式.例如,若要對齊方程式陣列,您可以使用 @ 和 &,如下所示: \eqarray(x+1&=2@1+2+3+y ...
- 【IOS】将一组包含中文的数据按照#ABC...Z✿分组
上一篇文章[IOS]模仿windowsphone列表索引控件YFMetroListBox里面 我们一步步的实现了WindowsPhone风格的索引. 但是有没有发现,如果你要实现按照字母排序,你还得自 ...
随机推荐
- python 列表append和 的区别??
python列表中的合并 python列表中append方法是给列表增加一个元素,而'+='是增加上该符号后边的元素,类似于extend方法 不知道对错,先记下来.我学的append方法是在列表最后追 ...
- java小技巧~修改对象的属性名
今天联调的时候,有个功能是在初始化的时候将图片路径回显到vant组件的上传组件上,但是vant组件需要图片路径名叫url,而后端返给我的路径名叫filePath,而且是双层嵌套.一个个遍历老麻烦了,下 ...
- OLOR:已开源,向预训练权值对齐的强正则化方法 | AAAI 2024
随着预训练视觉模型的兴起,目前流行的视觉微调方法是完全微调.由于微调只专注于拟合下游训练集,因此存在知识遗忘的问题.论文提出了基于权值回滚的微调方法OLOR(One step Learning, On ...
- ffmpeg一些笔记: 代码调试数据
1.AAC,MP3他的解码数据格式不支持,程序中给的是这个AV_SAMPLE_FMT_FLTP, Screen-Cpature-Recoder的codec-id为AV_CODEC_RAW_VIDEO ...
- ios证书免费分享
首先,ios证书能不能分享给别人使用,能否用别人的证书打包呢? 这个问题的答案在技术上是肯定可以的,但是我要解释一下,技术上可以,不代表真的就可以这样做,为什么呢? 首先,假如用别人的苹果开发者账号的 ...
- (六)Redis 消息队列 List、Streams
Redis 适合做消息队列吗?有什么解决方案?首先要明白消息队列的消息存取需求和工作流程. 1.消息队列 我们一般把消息队列中发送消息的组件称为生产者,把接收消息的组件称为消费者,下图是一个通用的消息 ...
- 【Mybatis】10 实现分页 & 分页插件
回顾SQL分页查询 也就是说,在查询结果的最后控制返回的起始位置&记录数量 参数1:返回的开始位置 参数2:要返回的记录数 但是,如果说是只写了一个参数,直接表示参数2处理 LIMIT [s ...
- 【MySQL】Windows-8.0.19 安装版 下载安装
下载地址 https://dev.mysql.com/downloads/windows/installer/8.0.html 跳过登陆 只选择基本服务 安装依赖环境,如果已存在,圆圈显示绿点,下一步 ...
- 编译python扩展模块报错:-ltensorflow_framework
参考: https://blog.csdn.net/u012947309/article/details/116736684 ===================================== ...
- ubuntu 安装osx 主题 转自linux公社
繁體 你好,游客 登录 注册 搜索 首页Linux新闻Linux教程数据库技术Linux编程服务器应用Linux安全Linux下载Linux认证Linux主题Linux壁纸Linux软件数码手机电脑 ...