[Atcoder SHPC2018] Tutorial】的更多相关文章

Link: SHPC2018 传送门 C: 一道看上去有些吓人的题目,不过$1e9$规模下的$n^m$代表肯定是可以约分的 可以发现能提供贡献的数对只有$2*(n-d)$种,那么总贡献为$2*(n-d)*(m-1)*n^{m-2}$ 除去$n^m$后就是$\frac{2*(n-d)*(m-1)}{n^2}$($d=0$时要特殊处理) #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long…
Link: AGC004 传送门 A: …… #include <bits/stdc++.h> using namespace std; long long a,b,c; int main() { scanf("%lld%lld%lld",&a,&b,&c); ==||b%==||c%==) puts("); else printf("%lld",min(a*b,min(a*c,b*c))); ; } Problem A…
Link: ARC060 传送门 C: 由于难以维护和更新平均数的值: $Average->Sum/Num$ 这样我们只要用$dp[i][j][sum]$维护前$i$个数中取$j$个,且和为$sum$的个数 最后统计$dp[n][k][k*a]$即可 这样就得到了$O(n^4)$的解法 #include <bits/stdc++.h> using namespace std; typedef long long ll; ; int n,a,sum,dat[MAXN]; ll dp[MAX…
Link: ARC061 传送门 C: 暴力$dfs$就好了 #include <bits/stdc++.h> using namespace std; typedef long long ll; ll n,res=; ],cnt; void dfs(int dep,ll sum) { if(dep==cnt){res+=sum;return;} ;i<=cnt;i++) { ll t=; ;j<=i;j++) t=t*+dgt[j]; dfs(i,sum+t); } } int…
Link: ARC065 传送门 C: 最好采取逆序贪心,否则要多考虑好几种情况 (从前往后贪心的话不能无脑选“dreamer”,"er"可能为"erase"/"eraser"的前缀) #include <bits/stdc++.h> using namespace std; string s; int main() { cin>>s; for(int cur=s.size();cur;) &&s.subs…
很好奇这周为什么只有Beginner Contest而没有Regular Contest,本来想着去30minAK的,结果1个小时了还有一道题调不出来o(╯□╰)o A:Parking 让我体验了下开场30sAC的快感...... #include <bits/stdc++.h> using namespace std; int main() { long long n,a,b;cin >> n >> a >> b; if(n*a<b) cout &l…
Link: ARC064 传送门 C: 贪心+对边界的特殊处理 #include <bits/stdc++.h> using namespace std; typedef long long ll; ; ll res=; int n,x,dat[MAXN]; int main() { scanf("%d%d",&n,&x); ;i<=n;i++) scanf("%d",&dat[i]); ]>x) res+=dat[]…
Link: ARC063 传送门 C: 将每种颜色的连续出现称为一段,寻找总段数即可 #include <bits/stdc++.h> using namespace std; ,len; ]; int main() { scanf();len=strlen(s+); ;i<=len;i++) ]) cnt++; printf(); ; } Problem C D: 可以发现对于每一个点的最优解$res_i$为: $max(w_j)-w_i(j>i)$ 找到最小的$res_i$的个…
Link: AGC003 传送门 A: 判断如果一个方向有,其相反方向有没有即可 #include <bits/stdc++.h> using namespace std; ]; map<char,bool> mp; int main() { scanf("%s",s); ;i<strlen(s);i++) mp[s[i]]=true; if(mp['S']==mp['N']&&mp['E']==mp['W']) puts("Ye…
Link: ARC 062 传送门 C: 每次判断增加a/b哪个合法即可 并不用判断两个都合法时哪个更优,因为此时两者答案必定相同 #include <bits/stdc++.h> using namespace std; typedef long long ll; ll n,a,b,x,y; int main() { scanf("%lld%lld%lld",&n,&a,&b); ;i<=n-;i++) { scanf("%lld%…