牛客NOIP暑期七天营-提高组5+普及组5
————提高组————
第一题:deco的abs
题目链接:https://ac.nowcoder.com/acm/contest/934/A
因为每个数都可以加任意次 d ,所以可以推出 0 <= 相邻两个数的差值的绝对值 < d ,于是我们先让所有数对d取模
再枚举每个位置 ,用 last 记录上一个数的值 ,然后求 abs(a[now] - last) 、abs( a[now] + d - last)、abs( a[now] - d, last )即可
下面贴代码:
#include <bits/stdc++.h>
#define ll long long
const int N = 1e3+;
using namespace std;
int n, d, now, last;
ll ans;
int main()
{
ios::sync_with_stdio(false);
while(cin>>n>>d>>last)
{
ans = ;
for (int i = ; i <= n; i++)
{
cin>>now;
int k = (now - last) % d;
ans += min(abs(k), min(abs(k - d), abs(k + d)));
last = now;
}
cout << ans << endl;
}
return ;
}
第二题:
题目链接:https://ac.nowcoder.com/acm/contest/934/B
这道题的解法是莫比乌斯反演,因为这个算法我也才刚开始学,所以打的过程中出了很多问题
然后就是题目本身的数据好像也有点问题,很多正解的代码提交也是tle,不过听说赛后重测了
(我的分数本来是170,排在59,但后来分数没变排名却成了55(滑稽...滑稽))
下面是作者给的题解

贴下我的代码tle
#include<bits/stdc++.h>
using namespace std;
const int N=;
const int mod=;
int vis[N],p[N],phi[N],num[N],cnt,ans=,K;
int fac[N],rev[N],Mn[N],P[N];
vector<int>G[N];
int pow_mod(int a,int x)
{
int res=;
while(x)
{
if(x&) res=1LL*res*a%mod;
x>>=;
a=1LL*a*a%mod;
}
return res;
}
void init()
{
for(int i=; i<N; i++)
{
if(!vis[i]) p[++cnt]=i,Mn[i]=mod,P[i]=i;
for(int j=; j<=cnt&&i*p[j]<N; j++)
{
vis[i*p[j]]=;
P[i*p[j]]=p[j];
if(!(i%p[j])) break;
}
}
}
int main()
{
ios::sync_with_stdio(false);
int n,Q,x;
init();
cin>>n;
for(int i=; i<=n; i++)
{
cin>>x;
while(x>)
{
int t=P[x],res=;
while(x%t==) x/=t,res++;
G[t].push_back(res);
}
}
for(int i = ; i<=cnt; i++)
{
if(G[p[i]].size()==) continue;
sort(G[p[i]].begin(),G[p[i]].end());
int res=,sum=;
res=G[p[i]][];
for(int j=; j<G[p[i]].size(); j++) sum+=res,res+=G[p[i]][j];
ans=1LL*ans*pow_mod(p[i],sum)%mod;
}
cout<<ans<<endl;
return ;
}
贴下大佬accept的代码
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define M 1000005
#define inf 0x3f3f3f3f
const int Mod=;
int n;
int Max,A[M];
int Ans=;
int Cnt[M];
LL f[M];
int R_P(int x,LL y) {
int res=;
while(y) {
if(y&)res=1LL*res*x%Mod;
x=1LL*x*x%Mod,y>>=;
}
return res;
}
int main() {
scanf("%d",&n);
for(int i=; i<=n; ++i)
scanf("%d",A+i),Max=max(A[i],Max),++Cnt[A[i]];
for(int i=Max; i>; --i) {
int res=;
for(int j=i; j<=Max; j+=i)res+=Cnt[j];
if(res>) {
f[i]=1LL*res*(res-)>>;
for(int j=i+i; j<=Max; j+=i)f[i]-=f[j];
Ans=1LL*Ans*R_P(i,f[i])%Mod;
}
}
printf("%d",Ans);
}
ps:第三题题目有点恶心就直接暴力拿了20分走人
————普及组————
第一题:手术等级???
题目链接:https://ac.nowcoder.com/acm/contest/929/A
个人感觉挺经典的一道题。。。
a[ N ] 存题目给定的数组,sum[ N ] 存 a[ i ] * i的前缀和,sum_[ N ] 存 a[ i ]的前缀和那么假设我们
要切的位置为k和k+1之间,那么切开后的区间为 1......k 和 k......n,那么此时的完美度可以这么表示:
wmd = a[1]*1+a[2]*2+...+a[k]*k + a[i]*(i - k) + a[i+1]*(i+1-k)+...+a[n]*[n-k] ,对于后半部分我们可
以发现 a[ i ]*(i - k) 可以分解为 a[ i ]*i - a[ i ]*k ,所以最后的 wmd 可以表示为下面的式子:
wmd = a[ 1 ] * 1 + a[ 2 ] * 2 + ... + a[ k ] * k + ... + a[ n ] * n - k*( a[ k+1] + ... + a[ n ]) = sum[ n ] - k * (sum_[ n ] - sum[ n-k ]);
贴下代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f3f3f3f
template<class T> void read(T &x)
{
x=;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))x=x*+ch-'',ch=getchar();
}
const int N = 1e5+;
ll a[N],sum[N],sum_[N];
int main()
{
ios::sync_with_stdio(false);
int n;
while(cin>>n)
{
cin>>a[];
sum[] = a[];
for(int i=;i<=n;i++)
{
cin>>a[i];
sum[i] = sum[i-] + a[i] * i;
}
partial_sum(a+,a++n,sum_+);
ll ans = inf;
// a[1]*1 + a[2]*2 + a[3]*3 + a[4]*4 + a[5]*5;
// -3*(a[4] + a[5]);
for(int k=;k<=n;k++)
{
ans = min(ans,sum[n] - k*(sum_[n] - sum_[k]));
}
cout<<ans<<endl;
//cout<<inf<<endl;
}
return ;
}
因为打完提高组已经没多少时间了,所以我普及组就做了一题,剩下的题目留给以后慢慢
牛客NOIP暑期七天营-提高组5+普及组5的更多相关文章
- 牛客NOIP暑期七天营-提高组1
牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子. 但是边权不为0 除了第一个有0的不行. x连向上一个比他小的数. 期间判断有无解. #include <bits/std ...
- 牛客NOIP暑期七天营-提高组6
目录 A-积木大赛 题目描述 link 题解 代码 B-破碎的序列 题目描述 link 题解 C-分班问题 题目描述 link 题解 比赛链接 官方题解 A-积木大赛 题目描述 link 题解 标签: ...
- 牛客NOIP暑期七天营-提高组3
第一题:破碎的矩阵 题目链接:https://ac.nowcoder.com/acm/contest/932/A 刚看到这题的时候感觉特别熟悉...诶,这不就是codeforces某场比赛的某某 ...
- 牛客NOIP暑期七天营-提高组2
第一题:ACGT 题目链接:https://ac.nowcoder.com/acm/contest/931/A trie树.hash.map遍历 ①.trie树上的节点多记一个rest值表示还有多少 ...
- 牛客NOIP暑期七天营-提高组6C:分班问题 (组合数)
题意:A班有N个人,B班有M个人,现在要组成一个新的班级C班,为了公平,从AB班各抽相同人数的人. 现在求所有方案中,人数之和是多少. 思路:即求Σ k*C(N,k)*C(M,k); 先忽略这个 ...
- 牛客NOIP暑期七天营-提高组5
A:deco的abs. 水题,先%,然后相邻两个数min()一下差值. #include<bits/stdc++.h> #define ll long long using namespa ...
- 牛客NOIP暑期七天营-提高组2C:滑块(平衡树) (这里rope骗分)
A:hash 或者 map 或者trie. #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) usin ...
- 牛客NOIP暑期七天营-提高组1 解题报告
https://ac.nowcoder.com/acm/contest/920#question A 构造+双指针 发现m的限制是1e5,而点数是5e4,所以不能构造太多的边,思考一下最短路树的定义. ...
- 牛客NOIP暑期七天营-TG3 赛后题解
目录 牛客NOIP暑期七天营-提高组3 A-破碎的矩阵 题目描述 link 题解 代码 B-点与面 题目描述 link 题解 代码 C-信息传递 题目描述 link 题解 牛客NOIP暑期七天营-提高 ...
随机推荐
- SpringBoot 源码解析 (八)----- Spring Boot 精髓:事务源码解析
本篇来讲一下SpringBoot是怎么自动开启事务的,我们先来回顾一下以前SSM中是如何使用事务的 SSM使用事务 导入JDBC依赖包 众所周知,凡是需要跟数据库打交道的,基本上都要添加jdbc的依赖 ...
- 024.掌握Pod-部署MongoDB
一 前期准备 1.1 前置条件 集群部署:Kubernetes集群部署参考003--019. glusterfs-Kubernetes部署:参考<附010.Kubernetes永久存储之Glus ...
- GitHub注册失败,卡在第一步
同事说他无法注册GitHub,我一开始以为GitHub又无法登录进去,我就登录了自己的GitHub账号,没有问题,可以登录啊,见第一个标签页.同一局域网,不可能我能登录,你无法完成注册啊.于是,我就在 ...
- centos7 设置连接无线wifi
安装系统后,首先要联网. 1.首先使用网线连接,之后尝试ping www.baidu.com我的是自动通的 2.需要查看网卡型号,先安装工具 yum -y install pciutils* 3.查看 ...
- IntelliJ IDEA使用报错
GZIPResponseStream不是抽象的, 并且未覆盖javax.servlet.ServletOutputStream中 继承了某个抽象类, 或者 实现某个接口这时候你必须 把基类或接口中的所 ...
- W5500设计方案
W5500是韩国一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,W5500同时也是一颗工业级以太网控制芯片,最近发现我们国内也有和W5500 芯片一样芯片 介绍给大家 如下图:
- React躬行记(14)——测试框架
测试不仅可以发现和预防问题,还能降低风险.减少企业损失.在React中,涌现了多种测试框架,本节会对其中的Jest和Enzyme做详细的讲解. 一.Jest Jest是由Facebook开源的一个测试 ...
- 解决“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同
原文链接:http://www.cnblogs.com/xiaoyou2018/p/10677437.html Windows server 2012 R2 解决"无法完成域加入,原因是试图 ...
- spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法)
这里不介绍原理,只是记录自己spring+cxf的开发过程和遇到的问题 场景:第三方公司需要调用我们的业务系统,以xml报文的形式传递数据,之后我们解析报文存储到我们数据库生成业务单据: WebSer ...
- 本科阶段就挑战自动驾驶开发?华为云ModelArts帮你轻松实现!
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...