————提高组————

第一题: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的更多相关文章

  1. 牛客NOIP暑期七天营-提高组1

    牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子. 但是边权不为0 除了第一个有0的不行. x连向上一个比他小的数. 期间判断有无解. #include <bits/std ...

  2. 牛客NOIP暑期七天营-提高组6

    目录 A-积木大赛 题目描述 link 题解 代码 B-破碎的序列 题目描述 link 题解 C-分班问题 题目描述 link 题解 比赛链接 官方题解 A-积木大赛 题目描述 link 题解 标签: ...

  3. 牛客NOIP暑期七天营-提高组3

    第一题:破碎的矩阵 题目链接:https://ac.nowcoder.com/acm/contest/932/A    刚看到这题的时候感觉特别熟悉...诶,这不就是codeforces某场比赛的某某 ...

  4. 牛客NOIP暑期七天营-提高组2

    第一题:ACGT 题目链接:https://ac.nowcoder.com/acm/contest/931/A trie树.hash.map遍历  ①.trie树上的节点多记一个rest值表示还有多少 ...

  5. 牛客NOIP暑期七天营-提高组6C:分班问题 (组合数)

    题意:A班有N个人,B班有M个人,现在要组成一个新的班级C班,为了公平,从AB班各抽相同人数的人. 现在求所有方案中,人数之和是多少. 思路:即求Σ k*C(N,k)*C(M,k);    先忽略这个 ...

  6. 牛客NOIP暑期七天营-提高组5

    A:deco的abs. 水题,先%,然后相邻两个数min()一下差值. #include<bits/stdc++.h> #define ll long long using namespa ...

  7. 牛客NOIP暑期七天营-提高组2C:滑块(平衡树) (这里rope骗分)

    A:hash 或者 map 或者trie. #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) usin ...

  8. 牛客NOIP暑期七天营-提高组1 解题报告

    https://ac.nowcoder.com/acm/contest/920#question A 构造+双指针 发现m的限制是1e5,而点数是5e4,所以不能构造太多的边,思考一下最短路树的定义. ...

  9. 牛客NOIP暑期七天营-TG3 赛后题解

    目录 牛客NOIP暑期七天营-提高组3 A-破碎的矩阵 题目描述 link 题解 代码 B-点与面 题目描述 link 题解 代码 C-信息传递 题目描述 link 题解 牛客NOIP暑期七天营-提高 ...

随机推荐

  1. 结合源码,重温 Android View 的事件处理知多少 ?

    前言 Android View 的 事件处理在我们的编程中,可谓是无处不在了.但对于大多数人而言,一直都是简单的使用,对其原理缺乏深入地认识. 学 Android 有一段时间了,最近发现,很多基础知识 ...

  2. linux 正确的关机流程

    查看系统的使用状态 1.使用who命令查看在线用户. 2.使用netstat -a或ss -tnl查看网络状态: 3.使用ps -aux 查看后台运行的程序. 通过上述操作可以了解系统目前使用状态,从 ...

  3. ExtentTestNGIReporterListener

    package com.testng.config; import com.aventstack.extentreports.ExtentReports; import com.aventstack. ...

  4. 全球 43 亿 IPv4 地址已耗尽!IPv6,刻不容缓

    大家都知道目前网络协议使用的主要是 IPv4,全称为 Internet Protocol version 4,作用是为每一个网络和每一台主机分配一个 IP,IP 地址是一个 32 位的二进制数,算下来 ...

  5. overflow属性值

    overflow属性的可取值有四种:visible.hidden.scroll.auto visible:不裁剪溢出的内容.浏览器把溢出来的内容呈现在其内容元素的显示区域以外的地方,全部内容在浏览器的 ...

  6. PHP通用分页类

    Page.class.php <?php/** * 分页类 * * 调用方式: * $p=new Page(总条数,显示页数,当前页码,每页显示条数,[链接]); * print_r($p-&g ...

  7. html代码/如何做到有横线无竖线的表格/或横线有颜色/竖线没颜色

    改变它的css样式,table{ border-collapse:collapse;}table tr td{ border-bottom:1px solid #dedede;}

  8. LNMP 源码发布Thinksaas论坛

    第一步:搭建LNMP架构 LNMP架构 注意:搭建php服务时,初始化 ./configure --prefix=/usr/local/php5 \ --enable-fpm \ --enable-d ...

  9. 谷歌地图 API 开发之获取坐标以及街道详情

    自己的项目中有获取当前点击的坐标经纬度或者获取当前街道的信息的需求.估计这个对于新手来说,还是比较麻烦的,因为从官网上找这个也并不是很好找,要找好久的,运气好的可能会一下子找到. 献上自己写的测试案例 ...

  10. vue基本开发环境搭建

    先安装node运行环境下载网址 https://nodejs.org/en/或者http://nodejs.cn/ 检查node是否安装成功命令行窗口直接输入 $ node -v 如果输出版本号,说明 ...