题目1 : 相似颜色

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

在CSS中我们可以用井号(#)加6位十六进制数表示一种颜色,例如#000000是黑色,#ff0000是红色,#ffd700是金色。

同时也可以将六位颜色#RRGGBB简写为#RGB三位颜色。例如#000与#000000是相同的,#f00与#ff0000是相同的,#639与#663399是相同的。

对于两个颜色#abcdef和#ghijkl,我们定义其距离是(ab - gh)2 + (cd - ij)2 + (ef - kl)2。(其中ab, cd, ef, gh, ij, kl都是十六进制数,也即0~255的整数)

给定一个六位颜色#abcdef,请你求出距离它最近的三位颜色#rgb。

输入

#abcdef

其中abcdef是'0'-'9'或'a'-'f'。

输出

距离输入颜色最近的#rgb

样例输入
#40e0d0
样例输出
    #4dc
 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; const char Hex[] = {'', '', '', '', '', '', '', '', '', '', 'a', 'b', 'c', 'd', 'e', 'f'}; int transform(char ch){
if(ch >= '' && ch <= '')return ch-'';
if(ch >= 'a' && ch <= 'f')return ch-'a'+;
} int main()
{
string str;
while(cin>>str){
int a = *transform(str[])+transform(str[]);
int b = *transform(str[])+transform(str[]);
int c = *transform(str[])+transform(str[]);
int aa = a / ;
if(a-*aa > *aa+-a)aa += ;
int bb = b / ;
if(b-*bb > *bb+-b)bb += ;
int cc = c / ;
if(c-*cc > *cc+-c)cc += ;
if(aa>=)aa = ;
if(bb >= ) bb = ;
if(cc >= ) cc = ;
cout<<"#"<<Hex[aa]<<Hex[bb]<<Hex[cc]<<endl;
} return ;
}

C++

 import java.io.BufferedInputStream;
import java.util.Scanner; public class Main {
static final char[] hex = new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; public static int transform(char ch) {
int res = 0;
if(ch >= '0' && ch <= '9')res = ch-'0';
if(ch >= 'a' && ch <= 'f')res = ch-'a'+10;
return res;
} public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(new BufferedInputStream(System.in)); String str;
while(cin.hasNext()) {
str = cin.nextLine();
int a = 16*transform(str.charAt(1))+transform(str.charAt(2));
int b = 16*transform(str.charAt(3))+transform(str.charAt(4));
int c = 16*transform(str.charAt(5))+transform(str.charAt(6));
int aa = a / 17;
if(a-17*aa > 17*aa+17-a)aa += 1;
int bb = b / 17;
if(b-17*bb > 17*bb+17-b)bb += 1;
int cc = c / 17;
if(c-17*cc > 17*cc+17-c)cc += 1;
if(aa>=16)aa = 15;
if(bb >= 16) bb = 15;
if(cc >= 16) cc = 15;
System.out.println("#"+hex[aa]+hex[bb]+hex[cc]);
}
} }

Java

题目2 : 挑选子集

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定N个整数A1, A2, ... AN,小Hi希望从中选出M个整数,使得任意两个选出的整数的差都是K的倍数。

请你计算有多少种不同的选法。由于选法可能非常多,你只需要输出对1000000009取模的结果。

输入

第一行包含三个整数N、M和K。

第二行包含N个整数A1, A2, ... AN。

对于30%的数据,2 ≤ M ≤ N ≤ 10

对于100%的数据,2 ≤ M ≤ N ≤ 100 1 ≤ K, Ai ≤ 100

输出

一个整数表示答案。

样例输入
5 3 2
1 2 3 4 5
样例输出
    1
 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long using namespace std; const int N = ;
const ll MOD = ;
ll arr[N], cnt[N], fact[N]; ll pow(ll a, ll b)//快速幂
{
ll ans = ;
while(b)
{
if(b&)ans *= a, ans %= MOD;
a *= a, a %= MOD;
b>>=;
}
return ans;
} ll inv(ll x){
return pow(x, MOD-);
} int main()
{
fact[] = ;
for(int i = ; i < ; i++) fact[i] = (fact[i-]*i)%MOD;
int n, m, k;
while(cin>>n>>m>>k){
for(int i = ; i < n; i++) cin >> arr[i];
sort(arr, arr+n);
memset(cnt, , sizeof(cnt));
for(int i = ; i < n; i++){
for(int j = i; j < n; j++){
if((arr[j]-arr[i])%k == )cnt[i]++;
}
}
ll ans = ;
for(int i = ; i < n; i++){
if(cnt[i] < m)continue;
ans += ((fact[cnt[i]-]*inv(fact[m-]))%MOD * inv(fact[cnt[i]-m]))%MOD;
ans %= MOD;
}
cout<<ans<<endl;
} return ;
}

C++

 import java.io.BufferedInputStream;
import java.util.Scanner; public class Main {
static final int N = 110;
static final long MOD = 1000000009; static long pow(long a, long n) {
long ans = 1;
while(n != 0) {
if((n & 1) != 0) ans = ans*a%MOD;
a = a*a%MOD;
n >>= 1;
}
return ans;
} static long inv(long x) {
return pow(x, MOD-2);
} public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(new BufferedInputStream(System.in));
int n, m, k, a;
long [] fact = new long[N];
fact[0] = 1;
for(int i = 1; i < 105; i+=1) {
fact[i] = (long) (fact[i-1]*i%MOD);
}
while(cin.hasNext()) {
n = cin.nextInt();
m = cin.nextInt();
k = cin.nextInt();
int[] cnt = new int[N];
for(int i = 0; i < n; i+=1) {
a = cin.nextInt();
cnt[a%k] += 1;
}
long ans = 0;
for(int i = 0; i < k; i+=1) {
if(cnt[i] >= m)
ans += (((fact[cnt[i]]*inv(fact[m]))%MOD*inv(fact[cnt[i]-m]))%MOD)%MOD;
}
System.out.println(ans);
} } }

Java

题目3 : 矩阵迷宫

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定一个NxN的方格矩阵迷宫,每个格子中都有一个整数Aij。最初小Hi位于迷宫左上角的格子A11,他每一步可以向右或向下移动,目标是移动到迷宫的出口——右下角ANN。

小Hi需要支付的代价包括路径中经过的所有格子中的整数之和,以及改变移动方向需要支付的代价。

小Hi第一次改变方向的代价是1,第二次的代价是2,第三次的代价是4,…… 第K次的代价是2K-1。

请你帮小Hi算出要离开迷宫代价最小的路径,并输出要支付的代价。

输入

第一行一个整数N。  (1 ≤ N ≤ 100)

以下N行每行N个整数,代表矩阵A。  (1 ≤ Aij ≤ 100)

输出

从左上角到右下角路径的最小的代价。

样例输入
3
1 3 5
1 1 2
5 1 1
样例输出
    9
 import java.io.BufferedInputStream;
import java.util.Scanner; public class Main {
static final int N = 110; static int [][] arr = new int[N][N];
static int [][][][] dp = new int[N][N][N*2][2]; // dp[i][j][k][l]表示从l方向到达(i,j)点,拐了k次弯的最小代价,令l=0为从左到右,l=1为从上到下
static int INF = 0x3f3f3f3f;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(new BufferedInputStream(System.in));
int n;
while(cin.hasNext()) {
n = cin.nextInt();
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
arr[i][j] = cin.nextInt();
}
}
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
for(int k = 0; k <= i+j; k++)
dp[i][j][k][0] = dp[i][j][k][1] = INF;
dp[1][1][0][0] = arr[1][1];
dp[1][1][0][1] = arr[1][1];
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
for(int k = 0; k <= i+j; k++) {
if(k > 16)continue; // 剪枝
dp[i][j+1][k][0] = Math.min(dp[i][j+1][k][0], dp[i][j][k][0]+arr[i][j+1]);
dp[i+1][j][k+1][1] = Math.min(dp[i+1][j][k+1][1], dp[i][j][k][0]+arr[i+1][j]+(int)Math.pow(2, k));
dp[i+1][j][k][1] = Math.min(dp[i+1][j][k][1], dp[i][j][k][1]+arr[i+1][j]);
dp[i][j+1][k+1][0] = Math.min(dp[i][j+1][k+1][0], dp[i][j][k][1]+arr[i][j+1]+(int)Math.pow(2, k));
}
}
}
int ans = INF;
for(int k = 0; k <= 2*n; k++)
for(int l = 0; l < 2; l++)
if(ans > dp[n][n][k][l])
ans = dp[n][n][k][l];
System.out.println(ans);
}
} }

Java

hihoCoder编程练习赛49的更多相关文章

  1. [hihocoder][Offer收割]编程练习赛49

    相似颜色 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #includ ...

  2. hihocoder 编程练习赛23

    第一题:H国的身份证号码I 题意:一个N位的正整数(首位不能是0).每位数字都小于等于K,并且任意相邻两位数字的乘积也小于等于K.按从小到大的顺序输出所有合法的N位号码,每个号码占一行. 思路:dfs ...

  3. hihocoder编程练习赛75

    题目1 : 工作城市分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 H公司在北京和上海两个城市各有一间办公室.该公司最近新招募了2N名员工,小Hi负责把这2N名员工 ...

  4. hihoCoder编程练习赛72

    题目1 : 玩具设计师 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho作为Z国知名玩具品牌AKIRE的首席设计师,对玩具零件的挑剔程度已经到了叹为观止的地步.所有 ...

  5. hihoCoder编程练习赛70

    题目1 : 数位翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 n,你可以进行若干次操作,每次操作可以翻转 n 的二进制表示下的某一位,即将 0 变成 ...

  6. hihoCoder编程练习赛69

    题目1 : 偶数长度回文子串 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个小写字母字符串,请判断它是否有长度为偶数的非空连续回文子串 输入 输入包含多组数据. ...

  7. hihoCoder编程练习赛67

    题目1 : 序列 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个正整数 n, P,求满足以下两个条件的长度为 n 的序列 ai 个数: 1. 1 ≤ ai ≤ ...

  8. hihoCoder编程练习赛52

    题目1 : 字符串排序 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 一般我们在对字符串排序时,都会按照字典序排序.当字符串只包含小写字母时,相当于按字母表" ...

  9. hihocoder编程练习赛91:相邻字符串

    题目链接 给定一个长度小于1e5的字符串s,s中字符全是大写英语字母.现在要寻找s中有多少组邻近的"hio"字符串,邻近的定义如下:hi距离+io距离+ho距离小于k.输入k和s, ...

随机推荐

  1. spring cloud 入门,看一个微服务框架的「五脏六腑」

    Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...

  2. 解决微信小程序登录与发布的一些问题

    解决微信小程序的问题 图片在电脑上显示但在手机上却无法显示的问题 要使用的是本地图片,不想把图片上传到网络再通过https的方式解决,解决方法如下: 1.image src中的图片地址对英文字母大小写 ...

  3. Python学习笔记【第六篇】:迭代器、生成器、高阶函数、装饰器

    迭代器 迭代器是访问集合元素的一种方式,迭代器从对象的第一个元素开始访问,知道所有元素被访问完成.迭代器只能往前访问,不能通过索引访问. 类型内部使用__iter__()方法转为迭代器,使用__nex ...

  4. npm安装webpack失败(mac和window都可能会遇到这样的情况,以下问题主要以mac为例)

     问题描述:我想查看一下webpack的版本,于是输入了命令webpack -v, 结果如下图所示: 注:这里提示我们要安装webpack-cli,是因为到了webpack4, webpack 已经将 ...

  5. Kali学习笔记29:默认安装漏洞

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 默认安装漏洞: 早期Windows默认自动开启很多服务 ...

  6. 从字节码看java类型转换【 深入理解 (T[]) new Object[size] 】

    我们都知道,java中对类型的检查是很严格的,所以我们平操作时,也往往很小心. 如题: (T[]) new Object[size],这种写法是一般我们是不会干的!但是有点经验的同学,还是会遇到这样写 ...

  7. dubbo实用知识点总结(三)

    1. 服务降级 2. 优雅停机 3. 主机绑定 4. 访问日志 5. Multicast注册中心 6. zookeeper注册中心 7. 推荐用法 8. 容量规划 9. 基准测试工具包

  8. GNU 下命令objcopy 用法

    概念: 将目标文件的一部分或者全部内容拷贝到另外一个目标文件中,或者实现目标文件的格式转换. 常用转换: 1 把elf格式转成s19格式: objcopy --srec-len --srec-forc ...

  9. str() vs repr() in Python

    str() 和 repr() 都是用作一个对象的字符表示. 1 str()的举例: s = 'Hello, Geeks.' print str(s) print str(2.0/11.0) 输出结果: ...

  10. [原创]K8PackWebShell ASPX整站打包工具

    [原创]K8PackWebShell ASPX整站打包工具[K.8](有无Rar执行权限都可以) 2011-06-11 01:49:21|  分类: 原创工具 Name: K8PackWebShell ...