2018.09.17 atcoder Digit Sum(数论)】的更多相关文章

传送门 数论好题啊. 首先对于b<=sqrt(n)b<=sqrt(n)b<=sqrt(n)的情况直接枚举b判断一下就行了. 下面谈一谈如何解决b>sqrt(n)b>sqrt(n)b>sqrt(n)的情况. 如果b>sqrt(n)b>sqrt(n)b>sqrt(n) 显然有: nnn modmodmod bbb +++ n/b=sn/b=sn/b=s nnn modmodmod bbb +++ b∗(n/b)=sb*(n/b)=sb∗(n/b)=s 这里…
传送门 一道有意思的题. 一开始想错了,以为一直lowerlowerlower_boundboundbound就可以解决询问,结果交上去TLE了之后才发现时间复杂度是错的. 但是贪心思想一定是对的,每次向前尽量推进一定可以得到最优解. 于是我想起了一道叫做弹飞绵羊的题,感觉这道题可以类比. 码了一会一直WA感觉不太对,发现有一个细节写错了233. A了之后在csdn上翻了翻题解. 发现都是倍增优化%%%,我被自己的低智商给蠢哭了,是啊连修改操作都没有分块很low啊. 不过还是讲讲如何分块吧. 对…
传送门 背包经典题. 直接f[i][j]f[i][j]f[i][j]表示选i张牌和为j的方案数. 最后统计答案就行了. 代码: #include<bits/stdc++.h> #define N 55 #define ll long long using namespace std; ll f[N][N*N],ans=0; int x,a,n; int main(){ f[0][0]=1,scanf("%d%d",&n,&a); for(int i=1;i&…
传送门 简单组合数学想优化想了半天啊233. 我们只需考虑翻开n张A,b张B,c张C且最后一张为A的选法数. 显然还剩下m+k−b−cm+k-b-cm+k−b−c张牌没有选. 这样的话无论前n+b+cn+b+cn+b+c张牌怎么选,方案数会乘上一个3m+k−b−c3^{m+k-b-c}3m+k−b−c. 继续讨论. 我们应该从前n+b+c−1n+b+c-1n+b+c−1中选出n−1n-1n−1个A(因为最后一个一定是A). 剩下的要么是B要么是C. 我们不妨令b+c=i. 那么有: ans=∑(…
传送门 感觉自己搜索能力退化了,这种弱智搜索写了整整5min,这样下去比赛会凉的. 看来得多练练题了. 代码: #include<bits/stdc++.h> #define ll long long using namespace std; ll x,ans=0; int n,num[15]; inline void dfs(int pos,ll sum){ if(pos==n+1){ans+=sum;return;} ll tmp=0; for(int i=pos;i<=n;++i)…
传送门 昨晚打比赛的时候不是很机智啊. 这道题贪心就能过了. 我们可以发现一个明显的结论,每次选的垃圾的距离从大到小排序之后,每个距离对答案的贡献的系数是5,5,7,9,11-也就是最远的是5,其余都是2*rank+1. 这样就可以根据每次选几个垃圾来贪心. 代码: #include<bits/stdc++.h> #define ll long long #define N 200005 using namespace std; inline int read(){ int ans=0; ch…
传送门 题意简述:输入一个数组an" role="presentation" style="position: relative;">anan. 对于所有2n−1" role="presentation" style="position: relative;">2n−12n−1个非空子集,每个子集的权值是包含的所有元素之和. 求这2n−1" role="presentatio…
读 第十三章<MySQL的性能优化与诊断> 总结 一说性能优化,整个人都像被打了鸡血一样…
传送门 一道挺有意思的贪心. 从1到n依次满足条件. 注意要特判第一个数已经大于x的情况. 但是如何贪心吃呢? 如果靠左的数没有越界,我们吃靠右的数. 原因是下一次靠右的数就会成为靠左的数,相当于多贡献了一次. 然后貌似要开long long 代码: #include<bits/stdc++.h> #define N 100005 #define ll long long using namespace std; ll a[N],x,ans=0; int n; inline ll read()…
传送门 就是给出一个矩形,上面有一些点,让你找出一个周长最大的矩形,满足没有一个点在矩形中. 这个题很有意思. 考虑到答案一定会穿过中线. 于是我们可以把点分到中线两边. 先想想暴力如何解决. 显然就是枚举矩形的上下边的坐标然后求两边的最大宽度. 用单调栈搞一下这样的效率是O(n2)O(n^2)O(n2)的. 考虑继续优化. 干脆我们只枚举一条边,另外一条用线段树维护最值. 代码: #include<bits/stdc++.h> #define N 300005 #define lc (p&l…
传送门 先考虑什么时候不合法. 第一是考虑任意两个特殊点的权值的奇偶性是否满足条件. 第二是考虑每个点的取值范围是否合法. 如果上述条件都满足的话就可以随便构造出一组解. 代码: #include<bits/stdc++.h> #define N 100005 #define inf 0x3f3f3f3f using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=get…
传送门 简单贪心啊. 这题显然跟t并没有关系,取差量最大的几组买入卖出就行了. 于是我们统计一下有几组差量是最大的就行了. 代码: #include<bits/stdc++.h> #define N 100005 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))ans=(ans<<3)+(a…
传送门 考虑每次摆石头都会消去最外层的一个连续颜色串. 所以只用统计一下有多少段颜色即可. 代码: #include<bits/stdc++.h> using namespace std; char s[100005]; int n,cnt=0; int main(){ scanf("%s",s+1),n=strlen(s+1); for(int i=2;i<=n;++i)if(s[i]!=s[i-1])++cnt; cout<<cnt; return 0…
传送门 一道思维题. 如果没有环那么对答案有k的贡献. 如果恰为一个环,可以用polya求贡献. 如果是一个有多个环重叠的双联通的话,直接转化为组合数问题(可以证明只要每种颜色被选取的次数相同一定可以在进行若干次交换之后变成一样的),相当于选一个值域在[1,k][1,k][1,k]中的单调不下降子序列的个数. 这个跟bzoj4403求法是相同的. 对于序列中的每一个元素的值加上它自己的下标就转化成了单调上升子序列的个数,有(edgecnt+k−1k−1)\binom {edge_{cnt}+k-…
传送门 有个十分显然的结论,只用枚举前后两个面就可以知道所有的面的颜色. 于是可以O(n2)O(n^2)O(n2)枚举前后两个面然后用map乱搞求贡献. 发现这样算出来会多算两倍(打表证明)于是答案除以3. 代码: #include<bits/stdc++.h> #define ll long long #define N 405 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdig…
传送门 sb贪心啊. 显然能选帕子就选帕子. 首先假设第一个人全出石头. 考虑把一些石头修改成帕子. 这样贡献只增不减,加起来就是答案. 代码: #include<bits/stdc++.h> #define N 100005 using namespace std; char s[N]; int n,delta=0,ans=0; bool col[N]; int main(){ scanf("%s",s+1),n=strlen(s+1); for(int i=1;i<…
传送门 很有意思的一道贪心. 就是每次翻最小的倍数来满足条件. 代码: #include<bits/stdc++.h> #define ll long long using namespace std; inline ll read(){ ll ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getc…
传送门 就是一个另类最短路啊. 利用颜色判断当前节点的最小花费的前驱边中有没有跟当前的边颜色相同的. 如果有这条边费用为0,否则费用为1. 这样跑出来就能ac了. 代码: #include<bits/stdc++.h> #define N 500005 #define M 500005 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); wh…
传送门 谁能想到这道题会写这么久. 本来是一道很sb的题啊. 就是每次选一个点只会影响到周围的九个方格,随便1e9进制就可以hash了,但是我非要作死用stl写. 结果由于技术不够高超,一直调不出来. 然后换成1e9进制的hash发现一直WA. 感觉是long long与int之间卡出了一点问题吧. 然后调了半天终于调过了. 代码: #include<bits/stdc++.h> #define N 100007 using namespace std; int n,h,w,n0,tot=0,…
传送门 思路简单不知为何调试了很久. 显然要么分成n个(所有字符相同),要么分成1个(原字符串无循环节),要么分成两个(有长度至少为2的循环节). 一开始以为可以直接hash搞定. 后来wa了几次之后发现可以轻松举出反例于是弃了hash. kmp大法好啊,判完循环节之后直接枚举两个子串的断点判是不是前缀与后缀同时满足条件就行了. 代码: #include<bits/stdc++.h> #define N 500005 #define mod 1000000007 using namespace…
传送门 区间dp简单题啊. 很显然用f[l][r]f[l][r]f[l][r]表示把区间[l,r][l,r][l,r]按要求染好的代价. 这样可以O(n)O(n)O(n)枚举断点转移了啊. 显然如果断开的两个点颜色相同可以省掉一次. 但是注意如果[l,r][l,r][l,r]两端点相同同样可以省掉一部分代价(细节见代码). 代码: #include<bits/stdc++.h> #define N 55 using namespace std; int n,col[N],f[N][N]; ch…
比赛传送门 水题大赛? 全是水题啊!!! T1 ABC333 就是判断是不是两个数都是奇数就行了. 代码: #include<bits/stdc++.h> using namespace std; int main(){ int a,b; cin>>a>>b; if(a%2&&b%2)cout<<"Yes"; else cout<<"No"; return 0; } T2 Shiritori…
比赛传送门 T1 Triangular Relationship 分析之后发现有两种情况: 1. n为奇数,那么所有数都是k的倍数. 2. n为偶数,那么所有数都是k/2的倍数. 然后就可以愉快A题了. 代码: #include<bits/stdc++.h> #define N 200005 #define ll long long using namespace std; inline ll read(){ ll ans=0; char ch=getchar(); while(!isdigi…
215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. What is the sum of the digits of the number 21000? 题目大意: 题目大意: 215 = 32768 并且其各位之和为 is 3 + 2 + 7 + 6 + 8 = 26. 21000 的各位数之和是多少? // (Problem 16)Power digit sum // Completed on Sun, 17 No…
老实说笔者学习 Go 的时间并不长,积淀也不深厚,这次因缘巧合,同组的同事以前是上海大学的开源社区推动者之一,同时我们也抱着部分宣传公司和技术分享的意图,更进一步的,也是对所学做一个总结,所以拟定了这次分享.另外与会的同学大多都是大二大三的"萌新",考虑到受众水平和技术分享的性质,所以实际上这次分享涉及到的知识点都相对基础,当然为了寓教于乐,本人也十分讨厌着重介绍基础语法时可能引起的枯燥,所以加了少少的私货,并且也针对 1.11 及之前版本中或优雅,或局限的特性做了发散性的讲解. 总而…
时间:2018.11.17地点:北京国华投资大厦…
时间:2018.10.17地点:北京国家会议中心…
时间:2018.09.15地点:北京国华投资大厦…
时间:2018.09.12地点:北京国际饭店会议中心…
时间:2018.08.17地点:北京金隅喜来登大酒店…