文远知行杯广东工业大学第十六届程序设计竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ大学ACM校赛新生赛是面向ACM/ICPC/CCPC/区域赛校队选手,巩固经典专题的编程比赛,ACM入门训练,大学ACM校队选拔比赛。https://ac.nowcoder.com/acm/contest/30896


A.区间最大值

https://ac.nowcoder.com/acm/contest/30896/Ahttps://ac.nowcoder.com/acm/contest/30896/A

由题目中的n%i容易想到整除分块,也就是n/i,再次发现由于我们按照n/i的值对数组进行分块,每一块的元素的n%i的余数都是递减的(很容易证明,因为n/i结果相等的区间,n不变而i递增,会导致n%i下降),然后每次我们对于每次询问去暴力遍历每一块的的左端点(最大值).取最大值即可.(建议学一学整除分块).

#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
using namespace std;
int arr[200005];
map<int,int>ma;
int main()
{int t,n,cnt=0;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&arr[i]);scanf("%d",&t);for(int i=0;i<n;i++){if(!ma.count(arr[i]/t)){ma[arr[i]/t]=1;cnt++;}}printf("%d",cnt);return 0;
}

B.模块改造

https://ac.nowcoder.com/acm/contest/30896/Bhttps://ac.nowcoder.com/acm/contest/30896/B

签到模拟.

#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<string>
using namespace std;
void print(int st,int en)
{int sth,enh;sth=st/2;enh=en/2;if(sth<10)printf("0");printf("%d:",sth);if(st%2==0)printf("00");elseprintf("30");printf(" - ");if(enh<10)printf("0");printf("%d:",enh);if(en%2==0)printf("00");elseprintf("30");printf("\n");
}
int main()
{string str;int flag=0,st=-1,en=-1,cont=0;cin>>str;for(int i=0;i<str.size();i++){if(cont==0&&str[i]=='1')//未开始{cont=1;flag=1;st=i,en=i+1;}else if(cont==1&&str[i]=='1'){en++;}if(cont==1&&str[i]=='0'){print(st,en);st=-1,en=-1;cont=0;}}if(st!=-1&&en!=-1)print(st,en),flag=1;if(flag==0)printf("00:00 - 00:00");return 0;
}

E.爬塔

https://ac.nowcoder.com/acm/contest/30896/Ehttps://ac.nowcoder.com/acm/contest/30896/E我们可以用一个长度为10的set去存每对满足题目条件的区间左右的端点,set[i]中i的含义是区间的长度.这样记录自动排序后,用lower_bound去查找即可.

#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<set>
#include<vector>
#include <utility>
using namespace std;
set<pair<int,int>>se[12];
void solve()
{int l,r;scanf("%d%d",&l,&r);for(int i=10;i>=1;i--){auto it=se[i].lower_bound({l,l});if(it->first>=l&&it->second<=r){cout<<i<<"\n";return ;}}cout<<"0"<<"\n";return ;
}
int main()
{int n,m;string str;scanf("%d",&n);cin>>str;str="1"+str;for(int i=1;i<=n;i++){int ans=1;for(int j=i;j<=min(n,i+9);j++){if(str[j]=='1')ans++;else if(str[j]=='0')ans--;if(ans<=0)break;//cout<<i<<" "<<j<<" "<<ans<<"\n";if(ans==1){se[j-i+1].insert({i,j});//cout<<i<<" "<<j<<"\n";}}  }scanf("%d",&m);while(m--)solve();return 0;
}

F.一个很大的数

登录—专业IT笔试面试备考平台_牛客网https://ac.nowcoder.com/acm/contest/30896/F

如图,我们可以将原有的每一种情况和新的情况相乘组合出新的情况,新的情况和老的情况不会重复,一起构成已有情况,继续循环下去即可.按照循环计算ans=ans+(ans*2*y)(y是每个素数的次数,乘以2是因为每次可以组成(1,k)和(k,1)两种组合).

#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#define int long long
using namespace std;
int qmi(int x,int y,int mod)
{int res=1;while(y){if(y&1)res=res*x%mod;y>>=1;x=x*x%mod;}return res;
}
signed main()
{int t,n,x,y;scanf("%lld",&t);while(t--){int ans=1;scanf("%lld",&n);for(int i=1;i<=n;i++){scanf("%lld%lld",&x,&y);ans=((ans%1000000007+(ans*2%1000000007*y%1000000007))%1000000007);}printf("%lld\n",ans);}return 0;
}

H.变换01串

登录—专业IT笔试面试备考平台_牛客网https://ac.nowcoder.com/acm/contest/30896/H读题,其实题目说可以两个方向操作,只需要从一个方向进行即可,其实是一样的.用线段树的方法来进行区间操作.首先解决最初始的查询问题,查询时利用线段树,线段树维护每个区间的左右范围,左右端点的值,还有贡献值,在计算两个区间的父节点的值时,需要将两个区间合并,那么看左边区间的右端点和右间左端点是否相同,若相同则表明这两个区间可以合并,直接将两者相加.而当不相等时,说明此时需要进行取反操作,则在两区间贡献相加的情况下还要多加1.然后就是区间修改,因为是区间修改,所以想到懒人标记,只是这里是每次修改将左右端点的值和懒人标记的值^=1即可.

#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
struct node
{int l,r;int sum,lz;int lval,rval;
}tree[400005];
int arr[100005];
int n,m;
void push_down(int node)
{if(tree[node].lz){tree[node<<1].lval^=1;tree[node<<1|1].lval^=1;tree[node<<1].rval^=1;tree[node<<1|1].rval^=1;tree[node<<1].lz^=1;tree[node<<1|1].lz^=1;tree[node].lz=0;}return ;
}
void push_up(int node)
{if(tree[node<<1].rval==tree[node<<1|1].lval)tree[node].sum=tree[node<<1].sum+tree[node<<1|1].sum;elsetree[node].sum=tree[node<<1].sum+tree[node<<1|1].sum+1;tree[node].lval=tree[node<<1].lval;tree[node].rval=tree[node<<1|1].rval;return ;
}
void build_tree(int l,int r,int node)
{tree[node].l=l;tree[node].r=r;if(l==r){tree[node].sum=0;tree[node].lval=arr[l];tree[node].rval=arr[l];tree[node].lz=0;return ;}int mid=(l+r)/2;build_tree(l,mid,node<<1);build_tree(mid+1,r,node<<1|1);push_up(node);
}
int query(int l,int r,int node)
{int res=0,flag=0;if(l<=tree[node].l&&tree[node].r<=r)return tree[node].sum;int mid=(tree[node].l+tree[node].r)/2;push_down(node);if(l<=mid)res+=query(l,r,node<<1),flag=1;if(r>mid){if(flag==1){if(tree[node<<1].rval==tree[node<<1|1].lval)res+=query(l,r,node<<1|1);elseres+=(query(l,r,node<<1|1)+1);}else if(flag==0)res+=query(l,r,node<<1|1);}return res;
}
void update(int l,int r,int node)
{if(l<=tree[node].l&&tree[node].r<=r){tree[node].lz^=1;tree[node].lval^=1;tree[node].rval^=1;return ;}int mid=(tree[node].l+tree[node].r)/2;push_down(node);if(l<=mid)update(l,r,node<<1);if(r>mid)update(l,r,node<<1|1);push_up(node);
}
int main()
{int op;scanf("%d%d",&n,&m);string s;cin>>s;for(int i=1;i<=n;i++)arr[i]=(s[i-1]-'0');build_tree(1,n,1);while(m--){int l,r;scanf("%d%d%d",&op,&l,&r);if(op==1)printf("%d\n",query(l,r,1));else if(op==2)update(l,r,1);}    return 0;
}

I.V字钩爪

登录—专业IT笔试面试备考平台_牛客网https://ac.nowcoder.com/acm/contest/30896/I思维题,题意是不限操作次数,也就是尽量取完.我们可以把石头按照间隔来进行分组,将i,i+k,i+2*k......i+n*k(k为间隔大小,i为初始序号,i+n*k<=石头总数)分为一组.分组后,为了尽量让答案更大,只需要尽量取完即可.我们必须尽量让石头都是能够在距离一定的情况下成对.当某组里面的石头为偶数个时,就可以全部取完.为奇数个时,一定有一个取不了,为了让贡献最大,那么这一个肯定是在这一组的奇数位置上,去奇数位置上最小的减去,因为这样才能使剩下的石头在题目给定距离下成对.

#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#define int long long
using namespace std;
int arr[1000006];
signed main()
{int n,k,ans=0;scanf("%lld%lld",&n,&k);for(int i=1;i<=n;i++){scanf("%lld",&arr[i]);ans+=arr[i];}for(int i=1;i<=k;i++){int minn=1e9,tt=0;for(int j=0;i+j*k<=n;j++){tt++;if(j%2==0)minn=min(minn,arr[i+j*k]);}if(tt%2==1)ans-=minn;}printf("%lld",ans);return 0;
}

继续努力

文远知行杯广东工业大学第十六届程序设计竞赛ABEFHI(记录)相关推荐

  1. 文远知行杯广东工业大学第十六届程序设计竞赛(题解)

    文远知行杯广东工业大学第十六届程序设计竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A:思维题 #include<bits/stdc++.h> usi ...

  2. 文远知行杯广东工业大学第十六届程序设计竞赛 E爬塔

    题目描述 Alice最近迷上了杀怪爬塔的游戏,在塔中有n层关卡,在通过第i层关卡后Alice会走上第i+1层.每个关卡中可能会获得女神的祝福或者遇到怪物.如果得到女神的祝福,Alice生命值会+1,如 ...

  3. 文远知行杯广东工业大学第十六届程序设计竞赛错题笔记

    目录 官网链接 A 区间最大值 F 一个很大的数 I V字钩爪 官网链接 A 区间最大值 题目描述 长度为 n 的数组 a,下标从1开始,定义 a[i]=n%i 有 m 组询问 {L,R},求 max ...

  4. 文远知行杯广东工业大学第十六届程序设计竞赛 A 区间最大值

    题目链接:https://ac.nowcoder.com/acm/contest/30896/A 题目描述 长度为 n 的数组 a,下标从 1 开始,定义 a [ i ] = n % i a[i]=n ...

  5. 文远知行杯广东工业大学第十六届程序设计竞赛

    A: 长度为 n 的数组 a,下标从1开始,定义 a[i]=n%ia[i]=n \% ia[i]=n%i 有 m 组询问 {L,R},求 maxi=LRa[i]max_{i=L}^{R} a[i]ma ...

  6. “字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛 1,2,3,4,5,7,8,9,10

    1001: hzy 和zsl 的生存挑战 Problem Description zsl 和hzy 来到了臭臭城堡,打算挑战臭臭城堡的大魔王hyz,大魔王hyz设置了这样的一个挑战: zsl 和hzy ...

  7. 字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛

    题目链接 传送门 简单数学题 题目 思路 前置知识: \[ \sum_{i=m}^{n}C_{i}^{m}=C_{n+1}^{m+1} \] 此题化简: \[ \begin{aligned} & ...

  8. 人类史上最大最好的希望事件 字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛

    作为CNCS的半壁江山,狗哥常常在宇宙中心邵阳眺望黄浦江,夜晚的星空总是迷人,有时候还能见到彗星滑落. 狗哥是幸运的,他在两秒钟内看到了十七颗彗星划过天际,作为打ACM的学者,自然不会有「稳定-1」情 ...

  9. “字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛

    a.hzy 和zsl 的生存挑战 思路:看见"假设他们都足够机智"就够了,全输出1.00就ac #include<bits/stdc++.h> #define INF ...

最新文章

  1. 发布Apworks应用开发框架(Alpha版本)
  2. 定义结构体的时候,里面的变量可以同时初始化吗?(不可以)
  3. nginx+fastcgi实现动静分离架构
  4. 【WEB HTTP】缓存
  5. Nginx添加SSL的支持
  6. pytorch学习笔记(三十七):RMSProp
  7. 【Linux】部署cobbler
  8. iPhone开发内存管理
  9. 整除光棍 (20 分)
  10. Spring+hibernate+JSP实现Piano的数据库操作---1.目录结构+展示
  11. Microsoft Office2021中文版Mac(office全家桶)
  12. Java编程:排序算法——归并排序
  13. python制作微信聊天机器人:10行代码让你秒变撩妹达人
  14. Nike Zoom LeBron 15 Performance Review
  15. Android VideoView 循环播放视频
  16. 首发丨极课大数据完成1亿元B轮融资,用AI提升学生作业、考试管理效率
  17. raid之创建磁盘列阵raid-0
  18. 第二章:python必备基础语法
  19. java从倒数第n个指定字符串开始截取到最后
  20. CoolProp使用方法(Python)

热门文章

  1. html从一个页面跳转至另一个html页面的子页面
  2. URL域名分类--学会应用基础知识啊
  3. 使用 C# 开源的微信/QQ/TIM 防撤回神器
  4. Spring Cloud Alibaba一站式解决方案
  5. 麦克风输入不进去声音
  6. linux命令sh什么意思,linux 指令中的sh是什么意思??
  7. java assert false_Java陷阱之assert关键字
  8. virtualBox配置NAT和Host-only绕过INODE校园网检测
  9. mybase7.3.5试用到期解决方法
  10. js 删除数组指定元素的方法