ARC158(A~D)
Tasks - AtCoder Regular Contest 158
实际上是114514年前做的来着,非常好的数学(跟数论无关)/思维题集(\(A\)~\(D\))
A - +3 +5 +7 (atcoder.jp)
- 因为我们并不在意\(x_1\),\(x_2\),\(x_3\)真正的数值,只在意它们的相对值,所以原本的操作实际上就是\(-2,+0,+2\)
- 所以可以先特判\(x_1\),\(x_2\),\(x_3\)的奇偶性
- 因为\(-2+2\)抵消了,所以\(x_1+x_2+x_3\)的和是定值,又因为最终三个数相等,所以\(ans=x_1=x_2=x_3=\frac{x_1+x_2+x_3}{3}\),这里也特判一下能不能除尽以及奇偶性
- 最后的答案就是\(\frac{|x_1-ans|+|x_2-ans|+|x_3-ans|}{4}\),因为\(+2,-2\)成对出现
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll x1,x2,x3,ans,t,op;
int main(){
int T; scanf("%d",&T);
while(T--){
scanf("%lld%lld%lld",&x1,&x2,&x3),op=x1%2;
t=(x1+x2+x3)/3;
if(x2%2!=op||x3%2!=op||(x1+x2+x3)%3||t%2!=op){ printf("-1\n"); continue; }
ans=(abs(t-x1)+abs(t-x2)+abs(t-x3))/4;
printf("%lld\n",ans);
}
return 0;
}
B - Sum-Product Ratio (atcoder.jp)
为了避免复杂的分类讨论,可以直接对负数和正数排序,然后分别取最小、最大的三个,直接暴力运算即可
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
const double INF=2e09;
int n,a[N],b[N],cnt1,cnt2;
int c[N],cnt3;
double ans1=INF,ans2=-INF;
int main(){
scanf("%d",&n);
for(int i=1,x;i<=n;++i){
scanf("%d",&x);
if(x<0) a[++cnt1]=x;
else b[++cnt2]=x;
}
sort(a+1,a+cnt1+1),sort(b+1,b+cnt2+1);
for(int i=1;i<=cnt1;++i) if(i<=3||cnt1-i+1<=3) c[++cnt3]=a[i];
for(int i=1;i<=cnt2;++i) if(i<=3||cnt2-i+1<=3) c[++cnt3]=b[i];
for(int i=1;i<=cnt3;++i)
for(int j=i+1;j<=cnt3;++j)
for(int k=j+1;k<=cnt3;++k)
ans1=min(ans1,(1.0*c[i]+1.0*c[j]+1.0*c[k])/(1.0*c[i]*c[j]*c[k])),ans2=max(ans2,(1.0*c[i]+1.0*c[j]+1.0*c[k])/(1.0*c[i]*c[j]*c[k]));
printf("%.12lf %.12lf",ans1,ans2);
return 0;
}
C - All Pair Digit Sums (atcoder.jp)
妙蛙种子题,但是\(sb\)眼瞎看成取\(max\)了,鬼知道怎么把那么大两个\(\sum\)看成\(max\)的
\(f(x+y)=f(x)+f(y)-9*k\),\(k\)为\(x\),\(y\)相加后的进位数
所以\(ans\)先赋值为\(f(x)*2n\),然后再来减后面这个\(9*k\)
然后对于当前数\(x\),可以二分找出使得它第\(i\)位进位的数字的个数\(num\)(只需要对所有数按照\(i\)位排序即可),\(ans-=num*9\)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+5;
int n;
ll a[N],ans,pw[N],q[16][N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%lld",&a[i]); ll t=a[i];
for(;t;t/=10) ans+=n*2*(t%10);
}
pw[0]=1;
for(int i=1;i<=15;++i) pw[i]=pw[i-1]*10;
for(int i=1;i<=15;++i){
for(int j=1;j<=n;++j) q[i][j]=a[j]%pw[i];
sort(q[i]+1,q[i]+n+1);
}
for(int i=1;i<=n;++i){
for(int j=1;j<=15;++j){
ll x=pw[j]-(a[i]%pw[j]);
int t=lower_bound(q[j]+1,q[j]+n+1,x)-q[j];
ans-=(n-t+1)*9;
}
}
printf("%lld",ans);
return 0;
}
D - Equation (atcoder.jp)
如果当前\(x\),\(y\),\(z\)不满足条件,考虑将\(x\),\(y\),\(z\)换成\(kx\),\(ky\),\(kz\),如果满足条件,则有:
\]
也就是
k\equiv \frac{(x^{3n}+y^{3n}+z^{3n})}{(x+y+z)(x^n+y^n+z^n)(x^{2n}+y^{2n}+z^{2n})}(mod\ p)
\]
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,p,x,y,z;
mt19937 rd(114514);
int rnd(int l,int r){ return rd()%(r-l+1)+l; }
int power(int x,int y){
int ans=1;
for(;y;y>>=1,x=x*x%p) if(y&1) ans=ans*x%p;
return ans;
}
int Elysia[3];
signed main(){
srand(time(0));
int T; scanf("%lld",&T);
while(T--){
scanf("%lld%lld",&n,&p);
while(114514){
x=rnd(1,p-3),y=rnd(x+1,p-2),z=rnd(y+1,p-1);
int t1=power(x,n),t2=power(y,n),t3=power(z,n);
int a=(x+y+z)%p*(t1+t2+t3)%p*(t1*t1%p+t2*t2%p+t3*t3%p)%p;
int b=(t1*t1%p*t1%p+t2*t2%p*t2%p+t3*t3%p*t3%p)%p;
if(a!=b){
if(!a||!b) continue;
int k=1ll*power(a,p-2)*b%p; x=x*k%p,y=y*k%p,z=z*k%p;
}
Elysia[0]=x,Elysia[1]=y,Elysia[2]=z,sort(Elysia,Elysia+3);
printf("%lld %lld %lld\n",Elysia[0],Elysia[1],Elysia[2]);
break;
}
}
return 0;
}
ARC158(A~D)的更多相关文章
- [转]unity3d 脚本参考-技术文档
unity3d 脚本参考-技术文档 核心提示:一.脚本概览这是一个关于Unity内部脚本如何工作的简单概览.Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的.在脚本对象内部不同志的函数被 ...
- HTTP1.1协议中文版-RFC2616
转自:http://www.cnpaf.net/Class/HTTP/200811/23277.html 说明 本文档规定了互联网社区的标准组协议,并需要讨论和建议以便更加完善.请参考 “互联网官方协 ...
- 【面试题】100IT名企java面试必考面试题
一.Java 基础部分 1. JAVA 的基本数据类型有哪些 ? String 是不是基本数据类型 ? Java 有 8 种基本数据类型: byte int ...
- 【.net 深呼吸】细说CodeDom(8):分支与循环
有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- ASP.NET Core 之 Identity 入门(一)
前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OW ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 从RPC开始(一)
这是一篇关于纯C++RPC框架的文章.所以,我们先看看,我们有什么? 1.一个什么都能干的C++.(前提是,你什么都干了) 2.原始的Socket接口,还是C API.还得自己去二次封装... 3.C ...
随机推荐
- Windows 下 Toad 如何使用 Oracle instantclient 32位客户端
Toad需要32位的Oracle客户端,通过如下方法,可以使用 Oracle instantclient. 1.安装 Toad, 2.下载 Oracle instantclient 32位版,解压到指 ...
- Linux+Typora+Picgo图床配置
Linux+Typora+Picgo图床配置 首先不建议安装在UbuntuStore里的版本,会有一些限制. 首先安装node.js 去官网下载编译好的源码,配置软连接,使全局都可以使用node命令. ...
- SpringBoot + 布隆过滤器:亿级数据下的高效防护盾与缓存穿透实战指南
在当今高并发.海量数据的应用场景中,布隆过滤器凭借其极低的内存占用和极快的查询效率,成为解决缓存穿透.数据预判等难题的利器.本文深度解析布隆过滤器的核心原理与实战应用,手把手教你如何将这一数据守门员融 ...
- halcon 入门教程(三) 边缘检测
原文作者:aircraft 原文链接:halcon 入门教程(三) 边缘检测 有兴趣可以多看其他的halcon教程 halcon 学习教程目录 本篇讲一下边缘检测(边缘提取),因为这个我发现也是比较常 ...
- Spring的容器创建过程
Spring容器的refresh()[创建刷新] 一.prepareRefresh()刷新前的预处理 1.initPropertySources()初始化一些属性设置;子类自定义个性化的属性设置方法: ...
- 🎀Java-Exception与RuntimeException
简介 Exception Exception 类是所有非致命性异常的基类.这些异常通常是由于编程逻辑问题或外部因素(如文件不存在.网络连接失败等)导致的,可以通过适当的编程手段来恢复或处理.Excep ...
- python操作PC版微信,给指定好友发信息(键鼠操作和复制粘贴相关库)
主要用来"pyautogui"."pyperclip"两个模块 pyautogui 主要用于控制键盘和鼠标操作.详细参考https://blog.csdn.ne ...
- requirejs的简单使用,requirejs报错Uncaught Error: Mismatched anonymous define() module: …
requirejs的简单使用 define()方法的3个参数: 参数1为模块名称(不填则以当前js的文件名定义一个匿名模块), 参数2为依赖项数组(可不填), 参数3为模块的实现 引入jQuery: ...
- python 处理word 分页符、分节符
import docx doc1 =docx.Document(r"C:\Users\Administrator\Desktop\test.docx") doc1.paragrap ...
- 使用DVC管理大文件变更历史(基于git)
DVC(Data Version Control) 是一个专门用于管理数据和二进制文件版本控制 的工具,它特别适合那些需要处理大量非文本文件(如图像.视频.模型.数据集等)的项目. 一般地,如果项目中 ...