hihoCoder编程练习赛70

题目1 : 数位翻转

时间限制:20000ms

单点时限:1000ms

内存限制:256MB

描述

给定一个数 n,你可以进行若干次操作,每次操作可以翻转 n 的二进制表示下的某一位,即将 0 变成 1,1 变成 0

现在小 Hi 想知道,至少需要多少次操作,才能将 n 变成 n-1

输入

一个正整数 n

1 ≤ n ≤ 109

输出

输出最少的操作次数

样例输入
10
样例输出
2

 1 // 2018-07-29
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #include <algorithm>
 6 #define ll long long
 7
 8 using namespace std;
 9
10 int main()
11 {
12     ll n;
13     while(cin>>n){
14         ll ans = n^(n-1);
15         int cnt = 0;
16         while(ans){
17             if(ans&1LL){
18                 cnt++;
19             }
20             ans>>=1;
21         }
22         cout<<cnt<<endl;
23     }
24
25
26     return 0;
27 }

题目2 : 最短公共子序列

时间限制:20000ms

单点时限:1000ms

内存限制:256MB

描述

给定一个 01 串 A,你需要找一个和它等长的01串 B,使得 A 和 B 的最长公共子序列最短

为了方便,你不需要输出 B,你只需要输出 A 和 B 的最长公共子序列的长度

输入

第一行一个 01 串 A

1 ≤ |A| ≤ 105

输出

输出最短的长度

样例输入
000111
样例输出
3

 1 // 2018-07-29
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #include <algorithm>
 6
 7 using namespace std;
 8
 9 string str;
10
11 int main()
12 {
13     cin>>str;
14     int len = str.length();
15     int zero = 0, one = 0;
16     for(int i = 0; i < len; i++)
17       if(str[i] == ‘0‘)zero++;
18       else one++;
19     cout<<min(zero, one)<<endl;
20
21     return 0;
22 }

题目3 : 拼三角形

时间限制:20000ms

单点时限:1000ms

内存限制:256MB

描述

给定 n 根木棍,第 i 根长度为 ai

现在你想用他们拼成尽量多的面积大于 0 的三角形,要求每根木棍只能被用一次,且不能折断

请你求出最多能拼出几个

输入

第一行一个正整数 n

第二行 n 个正整数 a1 … an

1 ≤ n ≤ 15

1 ≤ ai ≤ 109

输出

输出最多能拼出几个三角形

样例输入
6
2 2 3 4 5 6
样例输出
2

 1 // 2018-07-29
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #include <algorithm>
 6 #define ll long long
 7
 8 using namespace std;
 9
10 ll arr[20];
11 int n, ans;
12 bool vis[20];
13
14 void dfs(int step){
15     for(int i = 1; i <= n; i++){
16         for(int j = i+1; j <= n; j++){
17             for(int k = j+1; k <= n; k++){
18                 if(!vis[i] && !vis[j] && !vis[k] && arr[i]+arr[j]>arr[k]){
19                     vis[i] = vis[j] = vis[k] = true;
20                     ans = max(ans, step);
21                     dfs(step+1);
22                     vis[i] = vis[j] = vis[k] = false;
23                 }
24             }
25         }
26     }
27     return;
28 }
29
30 int main()
31 {
32     cin>>n;
33     for(int i = 1; i <= n; i++)
34       cin>>arr[i];
35     ans = 0;
36     sort(arr+1, arr+1+n);
37     memset(vis, 0, sizeof(vis));
38     dfs(1);
39     cout<<ans<<endl;
40
41     return 0;
42 }

原文地址:https://www.cnblogs.com/Penn000/p/9385921.html

时间: 2024-12-10 05:55:53

hihoCoder编程练习赛70的相关文章

hihocoder编程练习赛73 A 地铁站

1 /* 2 Source :hihocoder编程练习73 3 Problem :一个长度为n的串,由若干段1-a[i](假设有Y段)的序列组成,现在中间缺了K个数,问能够还原出来的方案数,需要保证还原出来的子串的个数最少,即最小Y 4 Solution :1.通过分析剩余的序列,我们可以知道原来最少的时候Y是多少,即看原来的序列有多少单调递增的子段. 5 2.进行有解的判断,假设已知序列段中每段的最大值是b[i] i=1..Y,如果sum(b[i]) > N,则说明无解,这是序列的长度一定已

hihocoder 编程练习赛23

第一题:H国的身份证号码I 题意:一个N位的正整数(首位不能是0).每位数字都小于等于K,并且任意相邻两位数字的乘积也小于等于K.按从小到大的顺序输出所有合法的N位号码,每个号码占一行. 思路:dfs #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N = 20; #define LL long long int n, k, a[N]; void

【hihocoder编程练习赛9】闰秒

题目链接 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<math.h> 5 #include<iostream> 6 #include<stdlib.h> 7 #include<set> 8 #include<map> 9 #include<queue> 10 #include<vector&

hihoCoder编程练习赛69

题目1 : 偶数长度回文子串 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个小写字母字符串,请判断它是否有长度为偶数的非空连续回文子串 输入 输入包含多组数据. 每组数据包含一行一个小写字母字符串 S 1 ≤ |S| ≤ 105 输出 对于每组数据如果存在,输出YES,否则输出NO 样例输入 cabbad ababa 样例输出 YES NO 1 // 2018-07-29 2 #include <cstdio> 3 #include <cstring

hihoCoder编程练习赛72

题目1 : 玩具设计师 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho作为Z国知名玩具品牌AKIRE的首席设计师,对玩具零件的挑剔程度已经到了叹为观止的地步.所有的玩具零件均在一块由N × M个单位块组成的设计板上切割获得.每个单位块有一个耐用指数aij. 由于玩具制作安全标准要求每个零件的面积至少大于等于S,小Ho想要知道设计板上能切割出满足标准的最大耐用指数的玩具零件为多少. 输入 输入共N+1行,第一行三个整数N,M,S表示设计板的大小以及安全标准中对

hihocoder - [Offer收割]编程练习赛17

hihocoder - [Offer收割]编程练习赛17 题目1 : F1 Score 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和他的小伙伴们一起写了很多代码.时间一久有些代码究竟是不是自己写的,小Hi也分辨不出来了. 于是他实现了一个分类算法,希望用机器学习实现自动分类. 为了评价这个分类算法的优劣,他选出了N份有标记的代码作测试集,并决定用F1 Score作为评价标准. 给出N份代码的实际作者是不是小Hi以及分类算法预测的结果,请你计算F1 Sco

HIHOcoder编程总结

[Offer收割]编程练习赛44 对于第一题题目1 : 扫雷游戏,首先要想清楚思路,虽然是暴力算法,但是这八个方向要自己把坐标写正确,不要慌乱,自己写的时候就写错了一个,第二个就是判断的时候,j + 1>=0,这种是显然的事情,应该是j +1 < N,写草稿也要认真. 还有一个非常非常大的错误. int N = 0; cin >> N; vector<string> input; input.resize(N); for (int i = 0; i < N; ++

hihocoder [Offer收割]编程练习赛18 C 最美和弦(dp)

题目链接:http://hihocoder.com/problemset/problem/1532 题解:一道基础的dp,设dp[i][j][k][l]表示处理到第几个数,当前是哪个和弦错了几次初始x值是多少.这里还要再辅助一个val[k]表示处理到当前情况只错了k次的最小值是多少因为改变的不止是和弦还有初始值,可以看一下代码理解一下. #include <iostream> #include <cstring> #include <cstdio> #include &

hihocoder [Offer收割]编程练习赛14 小Hi和小Ho的礼物

题目1 : 小Hi和小Ho的礼物 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 某人有N袋金币,其中第i袋内金币的数量是Ai.现在他决定选出2袋金币送给小Hi,再选2袋金币送给小Ho,同时使得小Hi和小Ho得到的金币总数相等.他想知道一共有多少种不同的选择方法. 具体来说,有多少种下标四元组(i, j, p, q)满足i, j, p, q两两不同,并且i < j, p < q, Ai + Aj = Ap + Aq. 例如对于数组A=[1, 1, 2, 2, 2]