[hgoi#2019/2/24]玄学考试
感想
对于这次考试,真的不想说什么了,太玄学了!!!
t1输出比标准输出长,这是什么操作???难道要关文件???但是交到oj上又A掉了。这是什么操作。
t2还好,没有出什么意外。。。但是要吐槽一下出题人,为什么空间给这么小!!!
t3的正解竟然是随机乱搞???
t4竟然给我玄学错掉了一个点,交到oj上还都是对的???
以上吐槽完毕
t1 密码(password)
题目大意
求出 \(\sum_{i=1}^{n} i^2 2^i\) 。
题解
遇到这种有倍数关系的累加和,一般都可以用错位相减法。
\[ Sn=1 \times 2^1 + 4 \times 2^2 + \cdots + n^2 \times 2^n \]
\[ 2 \times Sn=1 \times 2^2 + 4 \times 2^3 +\cdots + n^2 \times 2^{n+1} \]
上下两式错位相减得到以下算式
\[ Sn = n^2 \times 2^{n+1}-(1 \times 2^1 + 3 \times 2^2 + \cdots + ( 2 \times n -1) \times 2^n )\]
我们接下来的任务就是把后面那个玩意化简掉,依旧是用错位相减法
\[ Tn = 1 \times 2^1 + 3 \times 2^2 + \cdots + ( 2 \times n -1) \times 2^n \]
\[ 2 \times Tn = 1 \times 2^2 + 3 \times 2^3 + \cdots + ( 2 \times n -1) \times 2^{n+1} \]
上下两式错位相减得到以下算式
\[ Tn=(2\times n-1) \times 2^{n+1} - ( 2 + 2^3 + 2^4 + \cdots + 2^{n+1} )\]
\[ Tn=(2\times n-1) \times 2^{n+1} - (2 + 2^2 + 2^3 + \cdots + 2^{n+1} ) + 2^2 \]
\[ Tn=(2\times n-1) \times 2^{n+1} - ( 2^{n+2} - 2 ) + 2^2 \]
\[ Tn=(2\times n-1) \times 2^{n+1} - 2 \times 2^{n+1} + 6 \]
\[ Tn=(2\times n-3) \times 2^{n+1} + 6 \]
那么将式子代回去,就可以得到:
\[ Sn=n^2\times 2^{n+1} - (2\times n-3) \times 2^{n+1} - 6 \]
\[ Sn=(n^2-2\times n + 3) \times 2^{n+1} - 6 \]
ac代码
#include<bits/stdc++.h>
#define mod 1000000007
#define LL long long
using namespace std;
LL n;
LL power(LL n,LL m){
LL res=1;
while(m!=0){
if(m&1) res=(res*n)%mod;
n=(n*n)%mod;
m>>=1;
}
return res;
}
int main(){
scanf("%lld",&n);
LL ans=(n*n)%mod;
ans=(ans-2*n+3+mod)%mod;
LL tmp=power(2,n+1);
ans=((ans*tmp)%mod-6+mod)%mod;
printf("%lld\n",ans);
return 0;
}
t2 卡内存(memory)
题目大意
三种操作:
- 单点修改
- 查询区间和
- 回归到某此操作后的状态
解法
查询历史状态???这不就是主席树模板吗?(快速掏出了一个主席树模板,正准备往上面改)
但是给的空间只有\(8mb\),用主席树来做至少也要把所有的数组都开小10倍,那么不是MLE就是WA或者是RE。
那么怎么做呢?因为没有查询历史的信息,而只是回归到历史的状态,我们可以想到非常像递归搜索dfs的做法,我们也这样想一下。
我们将这些询问建成一个图,如果要回归,那么就将当前这个连到回归的节点上。
那么最后离线跑一遍dfs就可以了,在离线用线段树或者是树状数组存储一下就好了。
ac代码
#include<bits/stdc++.h>
#define lowbit(x) x&-x
#define N 100005
using namespace std;
struct edge{
int to,nt;
}E[N];
struct node{
int id,x,y,ans;
}q[N];
int cnt,n,m;
int H[N],c[N];
int read(){
int w=0,x=0;char ch=0;
while(!isdigit(ch))w|=ch=='-',ch=getchar();
while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return w?-x:x;
}
void addedge(int u,int v){
E[++cnt]=(edge){v,H[u]}; H[u]=cnt;
}
void add(int x,int v){
while(x<=n) c[x]+=v,x+=lowbit(x);
}
int query(int x){
int ret=0;
while(x>0) ret+=c[x],x-=lowbit(x);
return ret;
}
void dfs(int u){
if(q[u].id==1) add(q[u].x,q[u].y);
else if(q[u].id==2) q[u].ans=query(q[u].y)-query(q[u].x-1);
for(int e=H[u];e;e=E[e].nt){
int v=E[e].to;
dfs(v);
}
if(q[u].id==1) add(q[u].x,-q[u].y);
}
int main(){
n=read(),m=read();
for(int i=1;i<=n;i++) add(i,read());
for(int i=1;i<=m;i++){
char opt[20];
scanf("%s",opt);
if(opt[1]=='d'){
int x=read(),y=read();
q[i]=(node){1,x,y,0};
addedge(i-1,i);
}
else if(opt[1]=='s'){
int x=read(),y=read();
q[i]=(node){2,x,y,0};
addedge(i-1,i);
}
else{
int x=read();
q[i]=(node){3,x,0,0};
addedge(x,i);
}
}
dfs(0);
for(int i=1;i<=m;i++) if(q[i].id==2) printf("%d\n",q[i].ans);
return 0;
}
t3 图像分析(graph)
题目大意
求出一条直线,这条直线经过平面内的\(\frac{1}{3}\)个点。
解法
解法真的玄,如果小于300就暴力{n^3}枚举。
如果大于300,那么就随机找两个点,看看是不是符合我们的题意。
好像这样做正确率是\(\frac{8}{9}^100\),不是非酋都能过。
ac代码
#include<bits/stdc++.h>
#define LL long long
#define N 900005
using namespace std;
struct node{
LL x,y;
}a[N];
int n;
void solve1(){
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
int sum=2;
for(int k=1;k<=n;k++){
if(i==k||k==j) continue;
if(((a[i].y-a[j].y)*(a[k].x-a[i].x))==((a[i].x-a[j].x)*(a[k].y-a[i].y)))sum++;
if(sum*3>=n){
printf("%d %d\n",i,j);
return;
}
}
}
}
}
void solve2(){
while(1){
int i=(1ll*(rand()%n+1)*(rand()%n+1))%n+1,j=(1ll*(rand()%n+1)*(rand()%n+1))%n+1;
if(i<j) swap(i,j);
while(i==j)j=(1ll*(rand()%n+1)*(rand()%n+1))%n+1;
int sum=2;
for(int k=1;k<=n;k++){
if(i==k||k==j) continue;
if(((a[i].y-a[j].y)*(a[k].x-a[i].x))==((a[i].x-a[j].x)*(a[k].y-a[i].y)))sum++;
if(sum*3>=n){
printf("%d %d\n",i,j);
exit(0);
}
}
}
}
int main(){
srand(time(NULL));
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld%lld",&a[i].x,&a[i].y);
if(n<=300) solve1();
else solve2();
return 0;
}
t4 JYM 的公司(volume)
题目大意
输出一个数列中两两差的绝对值的和。
解法
比较简单。
我们从小到大排序,计算每个相差对答案有多少的贡献。
因为每一次的增加都会对后面的答案多增加一些贡献,那么我们就一边遍历一边累加贡献。
ac代码
#include<bits/stdc++.h>
#define LL long long
#define N 500000
using namespace std;
int n;
LL a[N],t[N],sum[N],ans=0,S[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
sort(a+1,a+1+n);
LL res=0;
for(int i=2;i<=n;i++){
res+=(i-1)*(a[i]-a[i-1]);
ans+=res;
}
printf("%lld\n",ans*2);
return 0;
}
[hgoi#2019/2/24]玄学考试的更多相关文章
- 上海市2019年公务员录用考试第一轮首批面试名单(B类)
上海市2019年公务员录用考试第一轮首批面试名单(B类) 2019-03-12 设置字体:大 中 小 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 1910565 5 ...
- 上海市2019年公务员录用考试第一轮首批面试名单(A类)
上海市2019年公务员录用考试第一轮首批面试名单(A类) 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 4016574 127.4 5112479 145.9 5125732 ...
- Alpha冲刺(1/10)——2019.4.24
所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(1/10)--2019.4.24 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...
- Beta冲刺(3/7)——2019.5.24
所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(3/7)--2019.5.24 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...
- [hgoi#2019/3/21]NOIP&NOI赛后总结
前言 今天做的是是2010年提高组和NOI的题目,做过几道原题,但是还是爆炸了,我真的太弱了. t1-乌龟棋 https://www.luogu.org/problemnew/show/P1541 这 ...
- 上海市2019年公务员录用考试笔试合格人员笔试成绩(B类)
考试类别:B类 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 5101919 154.7 5113380 156.5 5126791 133.5 5146138 126.2 ...
- 上海市2019年公务员录用考试笔试合格人员笔试成绩(A类)
考试类别:A类 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 4016574 127.4 5112479 145.9 5125732 124.3 5141074 159.9 ...
- [hgoi#2019/3/10]赛后总结
关于本次hg模拟赛,题目来源于CF1110. t1-无意义运算符(meaning) 题目描述 最大公约数和位运算之间有共同点吗?是时候来研究一下了. 给定一个正整数a,请找到一个闭区间[1,a-1] ...
- 2019年Amazon AWS-Solutions-Architect-Professional考试最新题库(AWS SAP题库)带考试模拟器
大家好,由于最近自己备考Amazon AWS-Solutions-Architect-Professional考试,购买了以下链接的题库,并通过了考试 https://www.kaoguti.gq/A ...
随机推荐
- PowerDesign 16.0 生成的SQL Server2000 数据库脚本时MS_Description不存在的问题解决
根据网上查询到的资料,找到了解决方法,原文出自:http://www.cnblogs.com/24tt/p/5047257.html PowerDesign 16.0 生成的Script语句,Sql2 ...
- jinja2模块使用教程
模板 要了解jinja2,那么需要先理解模板的概念.模板在Python的web开发中广泛使用,它能够有效的将业务逻辑和页面逻辑分开,使代码可读性增强.并且更加容易理解和维护. 模板简单来说就是一个其中 ...
- 因写太多 BUG!程序员遭公司颁奖羞辱,做的一个比一个绝
刚入职的程序员新人,办公桌上,基本上也就一电脑.一键盘.一鼠标,再配个被杯子.然而混迹职场多年的猿老们,办公桌上都有一些彰显身份地位的“好东西”. 这张图两点颇多,最显眼的,是办公桌上那个黄黄的东西, ...
- 利用Tarjan算法解决(LCA)二叉搜索树的最近公共祖先问题——数据结构
相关知识:(来自百度百科) LCA(Least Common Ancestors) 即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. 例如: 1和7的最近公共祖先为5: 1和5的 ...
- SpringMvc执行过程
--Test过程: 1. 先执行各种 Filter 2. HttpServlet.service(ServletRequest req, ServletResponse res) 3. HttpSer ...
- su: 无法设置用户ID: 资源暂时不可用
登录非root用户,报错如下:[root@test ~]# su - appsu: 无法设置用户ID: 资源暂时不可用 或者用ssh 命令连接服务器之后,如果一段时间不操作,再次进入 Terminal ...
- 第三个Sprint ------第九天
四则运算APP内侧: 1将APP安装包apk发到QQ群(班群),让自己班的同学率先体检.通过同学们的反馈.及时处理好bug,快速迭代. 2将APP下载链接发到微信朋友圈,QQ空间,让其他学校的同学也体 ...
- Git的其他用法
目录: 减少[.git]文件夹的大小和文件数 更换git for windows的文本编辑器 修改已经提交的commit说明 合并commit 解决merge时出现的冲突 回退一个merge 获取某一 ...
- mysql 备份数据库 mysqldump
@echo off for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE ...
- Java微信二次开发(三)
各种类型消息的封装 第一步:找到com.wtz.message.response包,新建类Image.java package com.wtz.message.response; /** * @aut ...