喵哈哈村与哗啦啦村的大战(一)

最大值就是全部+3,最小值就是全部-3,注意不能降为负数。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
int a[maxn],n;
int main(){
while(cin>>n){
int ans1=0,ans2=0;
for(int i=0;i<n;i++){
cin>>a[i];
ans1+=a[i]+3;
ans2+=max(0,a[i]-3);
}
cout<<ans1<<" "<<ans2<<endl;
}
}

喵哈哈村与哗啦啦村的大战(二)

最优答案就是摆成等边三角形,所有点均分过去,使得每个点都在无限靠近三角形的顶点位置。

那么最少摧毁(n+2)/3个点了。

#include<bits/stdc++.h>
using namespace std; int main(){
long long n;
while(cin>>n){
cout<<(n+2LL)/3LL<<endl;
}
}

喵哈哈村与哗啦啦村的大战(三)

考虑贪心,我们统计所有的和之后,我们每次选择ci最小的,即花费最小的进行操作。

然后不停使得和向着s靠拢,如果最后能靠拢的话,就输出答案,否则就输出impossible。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+6;
const int inf = 1e9+7;
int dp[maxn],a[maxn],c[maxn],l[maxn],r[maxn];
vector<pair<int,int> > sp[2];
int main(){
int n,s;
while(scanf("%d%d",&n,&s)!=EOF){
sp[0].clear();
sp[1].clear();
for(int i=1;i<=n;i++){
scanf("%d%d%d%d",&a[i],&c[i],&l[i],&r[i]);
}
int sum1=0,sum2=0,sum3=0;
for(int i=1;i<=n;i++){
sum1+=l[i];
sum2+=a[i];
sum3+=r[i];
sp[0].push_back(make_pair(c[i],r[i]-a[i]));
sp[1].push_back(make_pair(c[i],a[i]-l[i]));
}
if(sum1>s){
cout<<"impossible"<<endl;
continue;
}
if(sum3<s){
cout<<"impossible"<<endl;
continue;
}
int order = 0;
if(s>=sum2)order=0;
else order=1;
int sum4=abs(s-sum2);
int ans=0;
sort(sp[order].begin(),sp[order].end());
for(int i=0;i<sp[order].size();i++){
if(sum4>0){
int d=min(sum4,sp[order][i].second);
sum4-=d;
ans+=d*sp[order][i].first;
}
}
cout<<ans<<endl;
}
}

喵哈哈村与哗啦啦村的大战(四)

树形dp

维护dp1[i]表示从下到上大于等于的序列个数。

维护dp2[i]表示从下到上小于等于的序列个数。

这两者相乘,就是好序列的个数。

但是这有重复的项,因为都统计了相等的,所以得减去相等的与相等的之乘积。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
vector<pair<int,int> >E[maxn];
int n,a[maxn];
long long Down[maxn],Up[maxn],Down2[maxn],Up2[maxn];
long long equ[maxn];
long long ans = 0;
void dfs(int x,int fa){
Down[x]=1;
Up[x]=1;
Down2[x]=1;
Up2[x]=1;
equ[x]=1;
long long sumup,sumdown,sumequ;
for(int i=0;i<E[x].size();i++){
int v = E[x][i].second;
if(v==fa)continue;
dfs(v,x);
if(a[x]>=a[v]){
Down[x]+=Down[v];
}
if(a[x]<=a[v]){
Up[x]+=Up[v];
}
if(a[x]==a[v]){
equ[x]+=equ[v];
}
}
sumup=Up[x];
sumdown=Down[x];
sumequ=equ[x];
for(int i=0;i<E[x].size();i++){
int v = E[x][i].second;
if(v==fa)continue;
if(a[x]<=a[v]){
sumup-=Up[v];
}
if(a[x]>=a[v]){
sumdown-=Down[v];
}
if(a[x]==a[v]){
sumequ-=equ[v];
}
if(a[x]>=a[v])
ans+=Down[v]*sumup;
if(a[x]<=a[v])
ans+=Up[v]*sumdown;
if(a[x]==a[v])
ans-=equ[v]*sumequ;
}
}
int main(){
while(scanf("%d",&n)!=EOF){
ans=0;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]),E[i].clear();
for(int i=1;i<n;i++){
int A,B;
scanf("%d%d",&A,&B);
E[A].push_back(make_pair(a[i],B));
E[B].push_back(make_pair(a[i],A));
}
for(int i=1;i<=n;i++)
sort(E[i].begin(),E[i].end());
dfs(1,-1);
cout<<ans<<endl;
}
}

喵哈哈村与哗啦啦村的大战(五)

假设现在考虑到第i个数,第i个数是12=223,那么m[j]统计前i-1个数,前缀为j的个数。

那么gcp为2的答案就是m[2]-m[4]

看懂这个这道题就简单了,自己写就好了。

#include<bits/stdc++.h>
using namespace std; map<int,int> H;
int n;
int a[100005];
int main(){
while(cin>>n){
H.clear();
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
long long ans = 0;
for(int i=0;i<n;i++){
vector<int>tmp;
int now=1;
tmp.push_back(now);
for(int j=2;j*j<=a[i];j++){
while(a[i]%j==0){
now*=j;
tmp.push_back(now);
a[i]/=j;
}
}
if(a[i]!=1){
now*=a[i];
tmp.push_back(now);
}
reverse(tmp.begin(),tmp.end());
long long sum = 0;
for(int j=0;j<tmp.size();j++){
ans+=1ll*tmp[j]*(1ll*H[tmp[j]]-sum);
sum=H[tmp[j]];
H[tmp[j]]++;
}
}
cout<<ans<<endl;
}
}

喵哈哈村的魔法考试 Round #10 (Div.2) 题解的更多相关文章

  1. 喵哈哈村的魔法考试 Round #2 (Div.2) 题解

    喵哈哈村的魔法考试 Round #2 (Div.2) 题解 A.喵哈哈村的战争 题解: 这道题就是for一遍,统计每个村子的战斗力的和,然后统计哪个村子的战斗力和大一点就好了. 唯一的坑点,就是这道题 ...

  2. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解

    喵哈哈村的魔法考试 Round #1 (Div.2) 题解 特别感谢出题人,qscqesze. 也特别感谢测题人Xiper和CS_LYJ1997. 没有他们的付出,就不会有这场比赛. A 喵哈哈村的魔 ...

  3. 喵哈哈村的魔法考试 Round #7 (Div.2) 题解

    喵哈哈村的魔法考试 Round #7 (Div.2) 注意!后四道题来自于周日的hihocoder offer收割赛第九场. 我建了个群:欢迎加入qscoj交流群,群号码:540667432 大概作为 ...

  4. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)

    A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05   最后更新: 2017年2月21日 20:06   时间限制: 1000ms   内存限制: 128M 描述 传说喵哈哈村有三种神 ...

  5. 喵哈哈村的魔法考试 Round #19 (Div.2) 题解

    题解: 喵哈哈村的魔力源泉(1) 题解:签到题. 代码: #include<bits/stdc++.h> using namespace std; int main(){ long lon ...

  6. 喵哈哈村的魔法考试 Round #14 (Div.2) 题解

    喵哈哈村的四月半活动(一) 题解: 唯一的case,就是两边长度一样的时候,第三边只有一种情况. #include <iostream> #include <cstdio> # ...

  7. 喵哈哈村的魔法考试 Round #4 (Div.2) 题解

    有任何疑问,可以加我QQ:475517977进行讨论. A 喵哈哈村的嘟嘟熊魔法(1) 题解 这道题我们只要倒着来做就可以了,因为交换杯子是可逆的,我们倒着去模拟一遍就好了. 有个函数叫做swap(a ...

  8. 喵哈哈村的魔法考试 Round #20 (Div.2) 题解

    题解: A 喵哈哈村的跳棋比赛 题解:其实我们要理解题意就好了,画画图看看这个题意.x<y,那么就交换:x>y,那么x=x%y. 如果我们经过很多次,或者y<=0了,那么就会无限循环 ...

  9. 喵哈哈村的魔法考试 Round #18 (Div.2) 题解

    喵哈哈村的古怪石碑(一) 题解:暴力check一下是等比数列还是等差数列,然后输出答案即可.注意如果数据范围是1e9的话,就要快速幂了. 代码: #include <cstdio> #in ...

随机推荐

  1. python中对列表的所有操作方法

    列表: names = ['a','b','c','d'] 1.追加:names.append() >>> names.append('e') >>> names ...

  2. Android Studio安装apk失败

    可能的情况 手机上已经安装了应用或者应用卸载不彻底 解决办法: adb uninstall yourpackagename 如果uninstall失败,可以考虑 clean一下Android Stud ...

  3. 为什么在python中推荐使用多进程而不是多线程(转载)

    最近在看Python的多线程,经常我们会听到老手说:"Python下多线程是鸡肋,推荐使用多进程!",但是为什么这么说呢? 要知其然,更要知其所以然.所以有了下面的深入研究: GI ...

  4. NBUT1457

    不知道哪里的oj..做了交不上去.. 也是莫队的模板题 #include<iostream> #include<cstring> #include<cstdio> ...

  5. python 全栈开发,Day22(封装,property,classmethod,staticmethod)

    一.封装 封装 : 广义上的 :把一堆东西装在一个容器里 狭义上的 :会对一种现象起一个专门属于它的名字 函数和属性装到了一个非全局的命名空间 —— 封装 隐藏对象的属性和实现细节,仅对外提供公共访问 ...

  6. [转] Anaconda使用总结

    机器上的不同用户完全可以安装.配置自己的Anaconda,不会互相影响. 对于Mac.Linux系统,Anaconda安装好后,实际上就是在主目录下多了个文件夹(~/anaconda)而已,Windo ...

  7. day15--JavaScript语言

    JavaScript JavaScript是一门单独的编程语言.浏览器内置JavaScript的解释器. 独立的语言,浏览器具有js解释器. 存在与HTML中,在HTML中写JavaScript,存在 ...

  8. C# Winform将控件作为参数传递

    最近做个Winform 的程序设计,需要将窗体的控件作为参数传递到另外一个类的函数中去使用,每次都会忘记,简单的记下来,以备即时查看. 1. 设置控件的modifier属性设置为public 2. 以 ...

  9. python全栈开发day27-网络编程

    回顾:1.两个架构:C/S   B/S(统一了应用的接口)2.同一个电脑两个py文件通信(文件)3.两个电脑通信---网线4.交换机的通信方式:广播.单播.组播5.arp协议:通过ip地址找到对应的m ...

  10. BZOJ1051 [HAOI2006]受欢迎的牛 Tarjan 强连通缩点

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1051 题意概括 有n只牛,有m个羡慕关系. 羡慕关系具有传递性. 如果A羡慕B,B羡慕C,那么我们 ...