AIsing Programming Contest 2020 总结

A - Number of Multiples

按照题目意思走就行

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#include<iostream>
#include<algorithm>
using namespace std;
int l,r,d;
int main()
{IO;cin>>l>>r>>d;if(r<l) swap(l,r);int res=r/d-l/d;if(l%d==0) res++;cout<<res<<endl;return 0;
}

B - An Odd Problem

这题比A还纯模拟,按题目意思走

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#include<iostream>
#include<algorithm>
using namespace std;
const int N=110;
int a[N],n;
int main()
{IO;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];int res=0;for(int i=1;i<=n;i++)if((i&1)&&(a[i]&1)) res++;cout<<res<<endl;return 0;
}

C - XYZ Triplets

这题刚开始看错数据范围,结果RE了,然后又算错时间复杂度又TLE了,我也太菜了吧

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int N=10010;
const double eps=1e-6;
int n,f[N];
double calc1(int x,int y,int n)
{double delta=(x+y)*(x+y)-4*(x*x+y*y+x*y-n);if((x+y)*(x+y)<=4*(x*x+y*y+x*y-n)) return -1;return (sqrt(delta)-(x+y))/2.0;
}
int calc2(int x,int y,int n)
{int delta=(x+y)*(x+y)-4*(x*x+y*y+x*y-n);if(delta<=0) return -2;return (sqrt(delta)-(x+y))/2;
}
int main()
{IO;cin>>n;for(int k=1;k<=n;k++)for(int i=1;i<=k/i;i++)for(int j=1;j<=k/j;j++){double x=calc1(i,j,k);int y=calc2(i,j,k);if(x<eps) continue;if(abs(x-y)<eps) f[k]++;}for(int i=1;i<=n;i++) cout<<f[i]<<endl;return 0;
}

又是只做了三题,真就是签到战士?

D - Anything Goes to Zero

这题考试时想要高精度,我发现要写好几个高精度就懒得看了。第二天一看发现快速幂取模可以避免高精度,然后在网上搜了搜题解,搞了一上午终于AC了。
对于原二进制串中1的个数可能又三种情况①大于1②等于1③等于0我们可以发现只要模第一次,那么这个数就会回到intintint范围内,不妨设原二进制串中111的个数为sss,那么,第一次的需要模的数只有两种情况s−1,s+1s-1,s+1s1,s+1,于是我们可以用快速幂预处理出原串模s−1,s+1s-1,s+1s1,s+1的值,每当反转一位就相当于加上或减去2的整次幂,然后就可以很容易知道答案。
对于①存在s−1,s+1s-1,s+1s1,s+1,而对于②只存在模s+1s+1s+1的情况:如果模000那么说明该串全是0,那么答案自然直接是000,如果模s+1s+1s+1,那么肯定模的是222,如果最后一位不是111该串是偶数,操作一次就可以了,如果最后一位是111,那么该串是奇数,稍微那么该操作需要两次。对于③也是只存在模s+1s+1s+1的情况,而且肯定是模111,分析可知只用操作一次就可。

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=200010;
int a[N],n;
ll qmi(ll a,ll b,ll p)
{ll res=1%p;a%=p;while(b){if(b&1) res=res*a%p;b>>=1;a=a*a%p;}return res;
}
int calc(ll x)//计算二进制中1的个数
{int res=0;while(x){x-=x&-x;res++;}return res;
}
ll md(ll x,ll y)//取模函数,保证取模后是正数
{return (x%y+y)%y;
}
int main()
{cin>>n;int s=0;for(int i=1;i<=n;i++){scanf("%1d",&a[i]);s+=a[i];}if(s>1){ll x=0,y=0;for(int i=1;i<=n;i++){if(a[i]==0) continue;x=md(x+qmi(2,n-i,s-1),s-1);//预处理原串模s-1和s+1的值y=md(y+qmi(2,n-i,s+1),s+1);}for(int i=1;i<=n;i++){ll ans=0;int cnt=1;if(a[i]==0) ans=md(y+qmi(2,n-i,s+1),s+1);else ans=md(x-qmi(2,n-i,s-1),s-1);while(ans){ans%=calc(ans);cnt++;}cout<<cnt<<endl;}}else if(s==0) for(int i=1;i<=n;i++) cout<<1<<endl;else{for(int i=1;i<=n;i++){if(a[i]==1) cout<<0<<endl;//该串唯一的一个1被反转,串值变成0else{if(a[n]==1||i==n) cout<<2<<endl;//最后一位是1else cout<<1<<endl;}}}return 0;
}

E - Camel Train

①贪心+小根堆

题中有两种骆驼一种l>=rl>=rl>=r,那么该骆驼需要尽可能往前放,另一种骆驼l<rl<rl<r尽可能往后放,并且它们的最优解互不影响。因此我们可以分别考虑两种骆驼,不管哪种骆驼我们先把答案加上小的数,然后就变成之前做过的一个题lyd老师的<<算法竞赛进阶指南>>中的超市那道题。
贪心:按照位置贪心

#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#define k first
#define w second
using namespace std;
typedef pair<int,int> pii;
typedef long long ll;
const int N=200010;
pii a[N],b[N];
int main()
{int T;cin>>T;while(T--){int n,cnta=0,cntb=0;cin>>n;ll res=0;for(int i=0;i<n;i++){int k,l,r;cin>>k>>l>>r;if((k==0&&l>=r)||(k==n&&r>l)) {res+=min(l,r);continue;}if(l>=r) res+=r,a[cnta++]={k,l-r};else res+=l,b[cntb++]={n-k,r-l};}sort(a,a+cnta),sort(b,b+cntb);priority_queue<int,vector<int>,greater<int> >heap;for(int i=0;i<cnta;i++){heap.push(a[i].w);while(heap.size()>a[i].k) heap.pop();}while(heap.size()){res+=heap.top();heap.pop();}for(int i=0;i<cntb;i++){heap.push(b[i].w);while(heap.size()>b[i].k) heap.pop();}while(heap.size()){res+=heap.top();heap.pop();}cout<<res<<endl;}return 0;
}
②贪心+并查集

贪心:按照权值从大到小排序,对于每个牛,排到恰好的位置上,如果恰好的位置上有牛,就往前找看看前面有没有空位置。并查集维护1~pospos最近并且位置为空的序号

#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#define w first
#define k second
using namespace std;
typedef pair<int,int> pii;
typedef long long ll;
const int N=200010;
pii a[N],b[N];
int p[N];
int find(int x)
{if(p[x]!=x) p[x]=find(p[x]);return p[x];
}
int main()
{int T;cin>>T;while(T--){int n,cnta=0,cntb=0;cin>>n;ll res=0;for(int i=1;i<=n;i++) p[i]=i;for(int i=0;i<n;i++){int k,l,r;cin>>k>>l>>r;if((k==0&&l>=r)||(k==n&&r>l)) {res+=min(l,r);continue;}if(l>=r) res+=r,a[cnta++]={l-r,k};else res+=l,b[cntb++]={r-l,n-k};}sort(a,a+cnta),sort(b,b+cntb);reverse(a,a+cnta),reverse(b,b+cntb);for(int i=0;i<cnta;i++){int pos=find(a[i].k);if(pos) p[pos]=pos-1,res+=a[i].w;}for(int i=1;i<=n;i++) p[i]=i;for(int i=0;i<cntb;i++){int pos=find(b[i].k);if(pos) p[pos]=pos-1,res+=b[i].w;}cout<<res<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【倍增】【线段树】雨林跳跃(luogu 7599[APIO 2021 T2])

正题 luogu 7599[APIO 2021 T2] 题目大意 给你一排树中每棵树的高度&#xff0c;每次跳跃可以跳到左/右边第一棵比该树高的树&#xff0c;问你从A-B中某棵树跳到C-D中的某棵树的最小步数&#xff08;A⩽B<C⩽DA\leqslant B< C\leqslant DA⩽B<C⩽D&#xff09; 解题…

Duration(2020多校第二场D)

Duration&#xff08;2020多校第二场D&#xff09; 文章目录题意题解代码首先&#xff0c;非常感谢出题人出这个题&#xff0c;避免了我全wa的尴尬题意 求两个时间相差多少秒&#xff0c;两个时间为同一天 题解 全部转化成秒&#xff0c;然后求差 代码 #include<bits/s…

dotnetClub 的前世今生

三年之前&#xff0c;我做过一个在线调查&#xff0c;当时有不少人还是对一个在线社区表示出期待。.NET Core 技术正风声水起&#xff0c;所以我就开始了用它来开发一个论坛的计划。最近正式将项目推动到了一个 MVP 的状态。感兴趣的朋友&#xff0c;现在可以访问 preview.dotn…

P3308-[SDOI2014]LIS【最小割】

正题 题目链接:https://www.luogu.com.cn/problem/P3308 题目大意 三个nnn个数字的序列A,B,CA,B,CA,B,C。要求删除其中某些位置iii使得AAA的最长上升子序列至少减少111且删去位置BBB的权值和最小的情况下满足删去位置的CCC值升序排序后字典序最小。 解题思路 首先BBB值最小很…

Codeforces Round #656 (Div. 3)

A.Three Pairwise Maximums 首先最大的在原序列中肯定出现至少两次否则不能构造&#xff0c;即min max max&#xff0c;对于答案min min max肯定满足题意 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm>…

【LCT】网络(luogu 2173/ZJOI2011)

正题 luogu 2173 题目大意 给你一个图&#xff0c;每条边有有一种颜色&#xff08;numcolor⩽10num_{color}\leqslant 10numcolor​⩽10&#xff09;&#xff0c;保证以下性质&#xff1a; 1.一个点连出的同色边数不大于2 2.不存在同色边组成的环 现在让你进行3钟操作&…

【每日一题】7月13日题目精讲—Kingdom

【每日一题】7月13日题目精讲—Kingdom 文章目录题目描述题解&#xff1a;代码:时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 1048576K&#xff0c;其他语言2097152K 64bit IO Format: %lld题目描述 X王国有n位官员&#xff0c;编号从1到n。国…

P3309-[SDOI2014]向量集【线段树,凸壳】

正题 题目链接:https://www.luogu.com.cn/problem/P3309 题目大意 nnn个操作 在序列末尾加入一个向量(x,y)(x,y)(x,y)询问加入的第l∼rl\sim rl∼r个向量中的一个向量和(x,y)(x,y)(x,y)的点积最大值 强制在线&#xff0c;点积的定义为x1x2y1y2x_1x_2y_1y_2x1​x2​y1​y2​ …

CanalSharp-mysql数据库binlog的增量订阅消费组件Canal的.NET客户端

一.前言CanalSharp是阿里巴巴开源项目mysql数据库binlog的增量订阅&消费组件 Canal 的.NET客户端&#xff0c;关于什么是 Canal&#xff1f;又能做什么&#xff1f;我会在后文为大家一一介绍。CanalSharp 这个项目&#xff0c;是由我和 WithLin(主要贡献) 完成&#xff0c;…

Codeforces Round #657 (Div. 2)

A. Acacius and String 爆零&#xff01;太菜了&#xff0c;下来终于把A题代码调AC了 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> #include<cstring> #include<string> using namespace…

【树链剖分】软件管理(luogu 2146/金牌导航 树链剖分-2)

正题 luogu 2146 金牌导航 树链剖分-2 题目大意 有若干软件&#xff0c;除了软件0&#xff0c;所有软件都依赖且只依赖于另外一个软件 当要删除一个软件时&#xff0c;所有依赖于该软件的软件都要删掉 当安装一个软件时&#xff0c;该软件依赖的软件都要安装 问你每次操作…

【每日一题】7月14日题目精讲—压缩

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 给一个由小写字母组成的字符串&#xff0c;我们可以用一种简单的方法来压缩其中的重复…

P3306-[SDOI2013]随机数生成器【BSGS】

正题 题目链接:https://www.luogu.com.cn/problem/P3306 题目大意 给出一个p,a,b,x1,tp,a,b,x_1,tp,a,b,x1​,t&#xff0c;有xiaxi−1bx_iax_{i-1}bxi​axi−1​b 求一个最小的nnn使得xntx_ntxn​t 解题思路 下标缩一下先变成x0x_0x0​会更好算一点&#xff0c;只考虑x0x_0…

【DevOps+LIVE】直播复盘 – DevOps能力成长模型2018首发

昨天晚上小编和DevOpsDays中国核心组织者刘征老师和张乐老师一起嗨了一把&#xff0c;本来规划进行1小时的直播结果延长到了2个小时才结束&#xff0c;观众人数在前半段一直处于增长状态&#xff0c;直到开播一小时到达顶峰。小伙伴也非常给力&#xff0c;一共提出了40多个问题…

Codeforces Round #658 (Div. 2)

A - Common Subsequence 最短相同子序列长度肯定为1&#xff0c;如果一个元素都不相等之间不存在相同子序列 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include…

【树链剖分】染色(luogu 2486/金牌导航 树链剖分-3)

正题 luogu 2486 金牌导航 树链剖分-3 题目大意 给你一棵树&#xff0c;让你进行以下操作&#xff1a; 1.把一条路径染上一个颜色 2.查询一条路径上有多少个颜色段 解题思路 用树链剖分把问题转化为链上问题 然后维护一下左右端点颜色和颜色总数就好了 代码 #include<c…

小小粉刷匠

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 “lalala,我是一个快乐的粉刷匠”,小名一边快活地唱着歌,一边开心地刷着墙",兴致突…

P5363-[SDOI2019]移动金币【阶梯博弈,dp,组合数学】

正题 题目链接:https://www.luogu.com.cn/problem/P5363 题目大意 1n1\times n1n的网格上有mmm个硬币&#xff0c;两个人轮流向前移动一个硬币但是不能超过前一个硬币&#xff0c;无法移动者输。 求有多少种情况先手必胜。 解题思路 竟然有我会的题&#xff0c;我感动 位置做…

M-SOLUTIONS Programming Contest 2020总结

A - Kyu in AtCoder 直接模拟 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<iostream> #include<algorithm> using namespace std; int main(…

Emit动态代理.NetCore迁移之旅

前言】前面我们介绍了Aop 从静态代理到动态代理&#xff1a;https://www.cnblogs.com/7tiny/p/9657451.html我们在.NetFramework平台下使用微软提供的Emit技术实现了动态代理类的生成。但是.NetCore作为微软.Net平台的春天&#xff0c;如果类库光支持.NetFramework&#xff0c;…