A:题目1 : 鱼的战斗

时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
如下所示,在一条直线上,N条鱼往左游,N条鱼往右游。如果两条鱼相遇,大鱼就会吃掉小鱼。
AN AN-1 … A3 A2 A1 -> <- B1 B2 B3 … BN-1 BN
给定2N条鱼的大小,(保证没有2条鱼大小相同),请你计算最后会剩下多少条鱼。
输入
第一行包含一个整数N。
第二行包含N个整数A1, A2, … AN。
第三行包含N个整数B1, B2, … BN。
1 <= N <= 100
1 <= Ai, Bi <= 1000
输出
一个整数代表答案

样例输入
3
2 7 3
4 5 6

样例输出
2

解释:直接模拟就好了。。。

#include <iostream>
using namespace std;
int n=0;
int a[1003]={0};
int b[1003]={0};
int main(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) cin>>b[i];int i=1,j=1;while(i<=n&&j<=n){if(a[i]>b[j]) j++;else i++;}cout<<max(n-i,n-j)+1<<endl;return 0;
}

B:奇因子之和

时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
H国有一个很特殊的数学信仰,他们认为只包含2、3、5和7这四个质因子的数是真数,否则就是假数。
例如2、6、20、98等都是真数,11、26、85等都是假数。
在H国的一次全国中学生数学竞赛上,给出了N个真数A1, A2, … AN。
请你计算每一个Ai的奇因子之和。
例如90的奇因子有1、3、5、9、15、45,和是78。
输入
第一行包含一个整数N。
以下N行每行包含一个整数Ai,保证Ai是真数。
对于80%的数据,2 <= Ai <= 1000000
对于100%的数据,1 <= N <= 10000 2 <= Ai <= 1000000000000000
输出
输出N行,每行一个整数代表对应的答案

样例输入
2
2
90

样例输出
1
78

解释:aia_iai​ = 2a * 3b * 5c * 7d,那我们把aia_iai​的2因子全都除掉,剩下的直接求和就好了,sumisum_isumi​ = (30+31…+3b)(50+51…+5c)(70+71…+7c). sum = ∑i=1nsumi\sum_{i=1}^nsum_i∑i=1n​sumi​

#include <iostream>
#include<cstdio>
#define N 10003
using namespace std;
int n=0;
long long a[N]={0};
long long ok(long long x){while(x%2==0) x/=2;long long ret=1;for(int i=3;i<=7;i+=2){long long temp=1;long long sum=1;int num=0;while(x%i==0){num++;x/=i;temp*=i;sum+=temp;}ret=ret*sum;}return ret;
}
int main(){ios::sync_with_stdio(false);scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%lld",&a[i]);for(int i=1;i<=n;i++) printf("%lld\n",ok(a[i]));return 0;
}

C:选择奏折

时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
H帝国幅员辽阔,每天都有茫茫多的奏折如雪片般从各地送到皇帝面前。不过当朝皇帝不太勤勉,他决定只披阅由军机大臣挑选上的奏折。
皇帝手下一共有M名军机大臣,他们每天挑选奏折的过程如下:
首先将当天收到的奏折编号1~N。
第一名军机大臣心里默念一个整数A1,然后从所有奏折中将编号是A1倍数的奏折挑选出来;
第二名军机大臣心里默念一个整数A2,然后从剩余奏折中将编号是A2倍数的奏折挑选出来;
……
第M名军机大臣心里默念一个整数AM,然后从剩余奏折中将编号是AM倍数的奏折挑选出来;
请你计算当天皇帝一共要披阅多少份奏折?
输入
第一行包含两个整数N和M,依次是奏折数目和军机大臣数目。
以下M行每行包含一个整数Ai。
对于50%的数据,1 <= N <= 10000000
对于100%的数据,1 <= N <= 1000000000000 1 <= M <= 10 1 <= Ai <= 100000
输出
一个整数代表答案

样例输入
10 2
3
5

样例输出
5

解释:很明显直接容斥就好了。实现的话直接枚举二进制位,每位代表一个aia_iai​.

include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long a[13]={0};
long long n=0,m=0;
long long ret=0;
long long gcd(long long a,long long b){if(b==0) return a;return gcd(b,a%b);
}
long long lcm(long long a,long long b){return a*b/gcd(a,b);
}
long long fun(int state){int num=0;int mark=0;long long sum=0;while(state){if(state&1){mark++;if(mark==1){sum=a[num];}else{sum=lcm(sum,a[num]);}}num++;state/=2;}sum=n/sum;if(mark%2==0) sum=-sum;return sum;
}
int main(){cin>>n>>m;for(int i=0;i<m;i++) cin>>a[i];for(int i=1;i<(1<<m);i++){ret+=fun(i);}cout<<ret<<endl;return 0;
}

D:紧张的会议室2

时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
小Hi的公司最近员工增长迅速,同时大大小小的会议也越来越多;导致公司内的M间会议室完全不够用。
现在小Hi知道公司目前有N个会议,其中第i个会议的时间区间是(Si, Ei),权重是Wi。 注意这里时间区间可以视为是开区间,也就是说(3, 5)和(5, 6)不会被视为是同时进行的会议。
小Hi想知道利用这M间会议室最多能安排的会议的权重之和最大是多少?
输入
第一行包含两个整数N和M。
以下N行每行包含3个整数Si、Ei和Wi。
1 <= M <= N <= 250
0 <= Si < Ei <= 100000 1 <= Wi <= 1000
输出
一个整数代表答案

样例输入
5 2
1 10 10
1 5 5
6 10 3
1 2 1
2 10 8

样例输出
19

解释:最小费用流。把每个会议拆成2个点。入点和出点,直接流量为1费用为负权值。如果两个点可以连在一起就连一条边。第一个点的出点和第二个点的入点相互连接,费用为0,流量为1。两个超级汇点,一个连接全部入点,一个连接全部出点,费用为0,流量为1。最后在来一个汇点连接那个全部入点的点。然后直接跑模版就好了。

#include<iostream>
#include<vector>
#define N 666
#define INF 1000000009
using namespace std;
struct edge{int to,cap,cost,rev;
};
int V;
vector<edge> G[N];
int dist[N]={0};
int prevv[N],preve[N];
void add_edge(int from,int to,int cap,int cost){G[from].push_back(edge{to,cap,cost,G[to].size()});G[to].push_back(edge{from,0,-cost,G[from].size()-1});
}
int min_cost_flow(int s,int t,int f){int res=0;while(f){fill(dist,dist+V,INF);dist[s]=0;bool update=true;while(update){update=false;for(int v=0;v<V;v++){if(dist[v]==INF) continue;for(int i=0;i<G[v].size();i++){edge &e=G[v][i];if(e.cap>0&&dist[e.to]>dist[v]+e.cost){dist[e.to]=dist[v]+e.cost;prevv[e.to]=v;preve[e.to]=i;update=true;}}}}if(dist[t]==INF){return -1;}int d=f;for(int v=t;v!=s;v=prevv[v]){d=min(d,G[prevv[v]][preve[v]].cap);}f-=d;res+=d*dist[t];for(int v=t;v!=s;v=prevv[v]){edge &e=G[prevv[v]][preve[v]];e.cap-=d;G[v][e.rev].cap+=d;}}return res;
}
int n=0,m=0;
int L[N]={0},R[N]={0},W[N]={0};
bool ok(int x,int y){if(R[x]<=L[y]) return 1;return 0;
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++) cin>>L[i]>>R[i]>>W[i];V=2*n+2;for(int i=1;i<=n;i++){add_edge(2*i-1,2*i,1,-W[i]);}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j) continue;if(ok(i,j)){add_edge(2*i,2*j-1,1,0);}}}for(int i=1;i<=n;i++){add_edge(0,2*i-1,1,0);add_edge(2*i,V-1,1,0);}cout<<-min_cost_flow(0,V-1,m)<<endl;return 0;
}

hihoCoder-[Offer收割]编程练习赛100相关推荐

  1. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

  2. hihocoder [Offer收割]编程练习赛24

    比赛https://hihocoder.com/contest/offers24/problems 应该能拿到个鼠标垫 舒服了 这个oj体验好差,每次都要先因为选错语言CE一发,而且刷新之后还是默认G ...

  3. hihocoder [Offer收割]编程练习赛14 剑刃风暴

    题目4 : 剑刃风暴 时间限制:20000ms 单点时限:2000ms 内存限制:256MB 描述 主宰尤涅若拥有一招非常厉害的招式--剑刃风暴,"无论是战士还是法师,都害怕尤涅若的武士刀剑 ...

  4. hihocoder offer收割编程练习赛11 B 物品价值

    思路: 状态压缩 + dp. 实现: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> ...

  5. hihocoder offer收割编程练习赛12 B 一面砖墙

    思路: 就是求哪个长度出现的次数最多. 实现: 1 #include <iostream> 2 #include <cstdio> 3 #include <algorit ...

  6. hihocoder offer收割编程练习赛8 B 拆字游戏

    思路: 模拟,dfs. 注意题目中的trick,输出一块的时候不要把其他块也输出了. 实现: 1 #include <cstring> 2 #include <iostream> ...

  7. [hihocoder][Offer收割]编程练习赛46

    AEIOU 选出的子串中由AEI构成的子串和由OU构成的子串之间并没有什么关系,分别算出最长的加起来. #pragma comment(linker, "/STACK:102400000,1 ...

  8. hihocoder [Offer收割]编程练习赛19

    题目1 : 大礼堂地毯 枚举 #include<iostream> #include<cstring> #include<algorithm> #include&l ...

  9. 最简真分数c语言,HihoCoder1655 : 第K小最简真分数([Offer收割]编程练习赛39)(唯一分解+容斥定理+二分)(不错的数学题)...

    描述 给一个整数N,请你求出以N为分母的最简(既约)真分数中第K小的是多少? 输入 两个整数N个K. 对于30%的数据,1 <= N <= 1000000 对于100%的数据,1 < ...

  10. [Offer收割]编程练习赛2 hihocoder 1272 买零食 (DFS 或 dp 水题)

    时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰霜著称.第一次去一教小卖 ...

最新文章

  1. Swift之深入解析如何使用Xcode和LLDB v2修改UI元素
  2. php odbc连接数据库命名实例,一个用mysql_odbc和php写的serach数据库程序_php实例
  3. fedora下配置ipv6 dns服务器
  4. 计算机视觉python入门_计算机视觉应该怎样入门?
  5. 科大讯飞回应同传造假:人机耦合才是未来发展之道
  6. NetBeans 时事通讯(刊号 # 127 - Dec 01, 2010)
  7. NUC1015 计算数字的根
  8. 1036 跟奥巴马一起编程 (15 分)—PAT (Basic Level) Practice (中文)
  9. C# 子类实例化基类 基类使用不了子类的方法_C#委托事件机制:事件的完整声明,触发和事件的本质(6)...
  10. ActiveX控件概述
  11. ASCII码表的应用
  12. 创业者需要了解的基本财务知识
  13. 【COGS】1752. [BOI2007]摩基亚Mokia cdq分治模板题
  14. 安卓版本与adb的问题
  15. 订单导出(1688)
  16. 基于51单片机的三路超声测距仪设计wifi通信proteus仿真原理图PCB
  17. NDIS和Rndis区别
  18. POJ 2385: Apple Catching
  19. 数据库Geometry字段操作
  20. Android GreenDao3数据库升级,数据迁移

热门文章

  1. Shader 如何表现攻击范围
  2. python怎么检验股票日收益率_Python量化笔记-股票收益率的正态分布检验和凯利公式应用...
  3. 答读者问:Kafka顺序消费吞吐量下降该如何优化?
  4. c语言叶子,用C语言画的一片叶子
  5. ReplicaSet和Deployment
  6. 19js学习第六天数组第1部分
  7. 跟面试官谈【线程池】
  8. 马家河子java,【JAVA】共同的森林
  9. 考研复试英文自我介绍模板(学长已上岸)
  10. 对空防御的训练 改编自BZOJ3165 (线段树永久化标记 李超线段树)