我的博客

西游记写秋景的曲

目录

水痕收,山骨瘦。红叶纷飞,黄花时候,霜晴觉夜长,月白穿窗透。家家烟火夕阳多,处处湖光寒水溜。白蘋香,红蓼茂。桔绿橙黄,柳衰谷秀。荒村雁落碎芦花,野店鸡声收菽豆。

tensorflow 手写数字识别1

目录
  • 代码概览

main.py: https://paste.ubuntu.com/p/VMDgyHKKcD/

  • 载入数据集

input_data.py: https://paste.ubuntu.com/p/jvhTc7YzCT/ 这个代码可以自动下载或从本地载入训练数据和测试数据。

  • 查看测试数据

import input_data
mnist = input_data.read_data_sets(“MNIST_data/“, one_hot=True)

mnist是DataSet类型的对象,数据分为三部分:mnist.test,mnist.train,mnist.validation这三部分又都包含images和labels,他们的类型均为numpy.ndarray。可以通过他们的shape查看其维度。

> mnist.train.images.shape
(55000, 784)
> mnist.train.labels.shape
(55000, 10)

train包含55000幅图像,validation包含5000幅,test包含10000幅。图像大小是28*28=784。 可以使用matplotlib显示数据集中的图像。

> from matplotlib import pyplot as plt
> plt.imshow(mnist.train.images[0].reshape(28,28))

<matplotlib.image.AxesImage object at 0x7f738147e790>

> plt.show()
> mnist.train.labels[0]
array([0., 0., 0., 0., 0., 0., 0., 1., 0., 0.])

通过matplotlib查看数据图像 通过查看标签可以看到原来这个形似3的数字实际上是个7。

  • 定义模型

import tensorflow as tf
x = tf.placeholder(“float”, [None, 784])
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))

y = tf.nn.softmax(tf.matmul(x,W) + b)

  • 训练模型

y_ = tf.placeholder(“float”, [None,10])
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

  • 测试准确率

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, “float”))
print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})

准确率大概是91%

openssl生成证书供java使用

目录

需要使用openssl生成密钥和证书然后转换格式为PKCS12,再使用keytool转换为keystore格式

命令如下

  1. 生成私钥

    openssl genrsa -out my.pem 1024

  2. 生成签名请求

    openssl req -new -key my.pem -out my.csr

  3. 使用CA的私钥(CA_private.pem)和CA的证书(CA_cert.crt)签名证书

    openssl x509 -req -days 365 -in my.csr -CA CA\_cert.crt -CAkey CA\_private.pem -CAcreateserial -out my.crt

  4. crt证书转为p12(需要输入一个密码)

    openssl pkcs12 -export -in my.crt -inkey my.pem -out n6l.p12 -name my\_crt

  5. 使用keytool把p12证书转为jsk格式

    keytool -importkeystore -srckeystore my.p12 -srcstoretype PKCS12 -srcstorepass passwd -alias my\_crt -deststorepass mypass -destkeypass mypass -destkeystore my.jks

自签名证书 openssl req -new -x509 -key ca.pem -out ca.crt -days 365

3D Slicer CT 多平面重建(MPR)

目录

需要使用的模块: Endoscopy IGT->Volume Reslice Driver 其中 Volume Reslice Driver 在Extensions Manager里搜索SlicerIGT安装 步骤如下:

  1. 点击use mouse to Create-and-Place Fidcuial右边的箭头打开下拉菜单,点击选中Persistent。
  2. 点击激活use mouse to Create-and-Place Fidcuial
  3. 在图像上取点,这些点作为MPR视野的路径。
  4. 选择模块Endoscopy->endoscopy,点击Create Path。
  5. 选择模块IGT->Volume Reslice Driver,在R,Y,G中任意一个的Driver选择Transform-F,Mode选择Transverse
  6. 回到endoscopy模块,调整Flythrough中的Frame即可在第3步选择的点直接的路径上移动视野。

使用RT-56u工具链交叉编译c语言

目录

/home/sxw/Work/opensource/rt-n56u/toolchain-mipsel/toolchain-3.4.x/bin/mipsel-linux-uclibc-gcc ssl_client.c -I /home/sxw/Work/opensource/rt-n56u/trunk/libs/libssl/openssl-1.0.2/include -lssl -lcrypto -L /home/sxw/Work/opensource/rt-n56u/trunk/libs/libssl/openssl-1.0.2 -o clientmips 该命令用于编译一个使用openssl库的c语言程序

OpenWrt 开发环境搭建

目录
  1. 下载源码

    git clone https://git.openwrt.org/openwrt/openwrt.git

  2. 更新可选包

    进入源码目录,执行

    1
    2
    ./scripts/feeds update 
    ./scripts/feeds install -a
  3. 编译配置

    1
    2
    make defconfig 
    make menuconfig
  4. 编译

    make

  5. 在virtualbox中运行镜像

    在bin/target/x86/generic/路径下解压 openwrt-x86-generic-combined-ext4.img.gz得到openwrt-x86-generic-combined-ext4.img

    使用命令 VBoxManage convertfromraw -format VDI openwrt-x86-generic-combined-ext4.img openwrt15.vdi 把img文件转化为vdi文件

    启动virtualbox使用vdi虚拟磁盘添加虚拟机,选择Linux 2.6/3.x/4.x(32-bit)版本。1核512M内存即可,需要开启cup中的PAE/NX选项否则启动虚拟机会报错。

    默认编译安装的Openwrt固件不包含WEB管理界面,可通过opkg命令安装。

    1
    2
    3
    4
    opkg update opkg install luci 
    /etc/init.d/uhttpd enable
    /etc/init.d/uhttpd start
    /etc/init.d/firewall stop

3月12笔试

目录
  1. 第一题
    1. 解答
  2. 第二题
    1. 解答
  3. 第三题
    1. 解答(没全过,46%)
  4. 第四题
  5. 第五题

第一题

2020春招 技术综合试卷在线笔试

编程题|20.0分1/5

双行道

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

有一个2n的网格,有一个人位于(1,1)的位置,即左上角,他希望从左上角走到右下角,即(2,n)的位置。在每一次,他可以进行三种操作中的一种:1. 向右走一格,即从(x,y)到(x,y+1);2. 向上右方走一格,即,如果他在(2,y)的位置可以走到(1,y+1);3. 向下右方走一格,即,如果他在(1,y)的位置可以走到(2,y+1); 问题当然不会这么简单,在这2n的格子中,有一部分格子上有障碍物,他不能停在障碍物上,当然也不能走出网格,请问他有多少种不同的路线可以到达(2,n)。

输入

输入第一行仅包含一个正整数n,表示网格的长度。(1<=n<=50)

接下来有2行,每行有n个字符,“X”代表障碍物,“.”代表可以停留。

输出

如果没有可以到达的路线则输出-1,否则输出方案数量。

样例输入

1
2
3
5
..X.X
XX...

样例输出

1
2

规则

请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果
点击“调试”亦可保存代码
编程题可以使用本地编译器,此页面不记录跳出次数

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import functools
n = int(input())
mp = [input() for _ in range(2)]


@functools.lru_cache()
def dfs(i, j):
global cnt
if j == n-1:
return 1
a = 0
if mp[0][j+1] == '.':
a += dfs(0, j+1)
if mp[1][j+1] == '.':
a += dfs(1, j+1)
return a
cnt = dfs(0, 0)
if cnt == 0:
print(-1)
else:
print(cnt)

错误解法:刚开始看成是走法种数,但实际上是路线种数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
dp = [[0] * n, [0] * n]
dp[0][0] = 1
if mp[0][0] == '.':
for i in range(1, n):
c = 0
if mp[0][i-1] == '.':
c += dp[0][i-1]
if mp[1][i-1] == '.':
c += dp[1][i-1]
if c == 0: break
if mp[0][i] == '.':
dp[0][i] = c
if mp[1][i] == '.':
dp[1][i] = c
if dp[1][-1] > 0:
print(dp[1][-1])
else:
print('-1')
else:
print('-1')

第二题

2020春招 技术综合试卷在线笔试

编程题|20分2/5

最好一样

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 131072KB;其他语言 655360KB

题目描述:

给出一个序列包含n个正整数的序列A,然后给出一个正整数x,你可以对序列进行任意次操作的,每次操作你可以选择序列中的一个数字,让其与x做按位或运算。你的目的是让这个序列中的众数出现的次数最多。请问众数最多出现多少次。

输入

输入第一行仅包含两个正整数n和x,表示给出的序列的长度和给定的正整数。(1<=n<=100000,1<=x<=1000)

接下来一行有n个正整数,即这个序列,中间用空格隔开。(1<=a_i<=1000)

输出

输出仅包含一个正整数,表示众数最多出现的次数。

样例输入

1
2
5 2
3 1 3 2 5

样例输出

1
3

提示

1
2
样例解释
例如如果序列中所有数字都不修改时,众数为3,3出现的次数为2,如果我们把两个3都做如题操作,序列会变为1,1,1,2,5,此时众数为1,出现次数为3,所以我们选择后者方案,输出众数出现的次数,即3。

规则

请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果
点击“调试”亦可保存代码
编程题可以使用本地编译器,此页面不记录跳出次数

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
n, x = [int(v) for v in input().split()]
import collections
cnt = collections.Counter()
#l = [3, 1, 3, 2, 5]
l = [int(v) for v in input().split()]
for v in l:
cnt[v]+= 1
vv = v | x
#print(v, vv)
if vv != v:
cnt[vv] += 1
ll = list(cnt.values())
ll.sort(reverse=True)
print(ll[0])

题目样例有错

第三题

2020春招 技术综合试卷在线笔试

编程题|20.0分3/5

整除的数组

时间限制:C/C++语言 3000MS;其他语言 5000MS
内存限制:C/C++语言 131072KB;其他语言 655360KB

题目描述:

小美曾经有一个特殊的数组,这个数组的长度为n。但是她在打恐怖游戏的时候被吓得忘记了这个数组长什么样了。不过她还记得这个数组满足一些条件。首先这个数组的每个数的范围都在L和R之间。包括端点。除此之外,这个数组满足数组中的所有元素的和是k的倍数。但是这样的数组太多了,小美想知道有多少个这样的数组。你只需要告诉她在模1e9+7意义下的答案就行了。

输入

一行四个整数n,k,L,R

(1≤n≤1e5 1≤k≤10 1≤L≤R≤1e9)

输出

输出一个数表示满足条件的数组的个数。

样例输入

1
9 1 1 3

样例输出

1
19683

规则

请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果
点击“调试”亦可保存代码
编程题可以使用本地编译器,此页面不记录跳出次数

解答(没全过,46%)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 9 1 1 3
n,k,L,R = [int(v) for v in input().split()]
MOD = int(1e9+7)

# print((L-1)//k,R//k)
mod = [(R // k - (L-1) // k)% MOD] * k
# print(((L-1) // k)*k,L)
for i in range(((L-1) // k)*k,L):
mod[i%k] -= 1
# print((R // k)*k,R+1)
for i in range((R // k)*k,R+1):
mod[i%k] += 1
for i in range(len(mod)):
mod[i] = mod[i] % MOD

d = mod
#print(mod)
for i in range(n-1):
#print(d)
dd= [0] * k
for j in range(k):
for l in range(k):
dd[(j+l)%k] += (d[j] * mod[l]) % MOD
d = dd
print(d[0])

第四题

2020春招 技术综合试卷在线笔试

编程题|20.0分4/5

物资采购

时间限制:C/C++语言 2000MS;其他语言 4000MS
内存限制:C/C++语言 131072KB;其他语言 655360KB

题目描述:

某公司要建厂投产一种产品,已知该产品共需要k种不同的原材料才能生产,而在这个工厂周围有n个可供建厂的地址,同时这n个位置都生产该产品所需k种原材料中的一种,在这n个位置间存在一些通行的道路,我们可以视这些道路的长度都为1,保证这些位置之间两两都是连通的。很显然工厂面临一个很严峻的问题,就是原料采集,我们定义采集一种原材料的花费为工厂所在位置到最近的一个该材料的采集点的距离,在一个位置建厂的成本为k种原材料的采集花费之和。请你对每一个位置都求出其建厂的花费。

输入

输入第一行有三个正整数n,m,k,分别代表可供选择的建厂地址数量,编号为从1到n,这些地址之间的道路数量,生产所需的原材料数量,编号为1到k。(1<=n,m,<=50000,1<=k<=100)

输入第二行包含n个正整数,第 i 个正整数a_i表示第i个地址是第a_i种原料的采集点。(1<=a_i<=k)

接下来有m行,每行有两个正整数 u,v,表示u号位置和v号位置之间有一条连接的路径,可能存在重边或自环(如样例所示)。

输出

输出包含 n 行,每行一个正整数,第 i 行表示第个位置的建厂成本。

样例输入

1
2
3
4
5
6
7
5 5 3
1 1 2 3 1
1 4
2 4
3 4
4 5
4 3

样例输出

1
3 3 3 2 3

规则

请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果
点击“调试”亦可保存代码
编程题可以使用本地编译器,此页面不记录跳出次数

第五题

2020春招 技术综合试卷在线笔试

编程题|20.0分5/5

小仓的射击练习1

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

小仓酷爱射击运动。今天的小仓会进行N轮射击,已知第i次射击,她击中靶心的概率是a[i] -1 。小仓想知道N轮射击后,偏离靶心次数为 0 ,1 ,2 次的概率分别是多少。

输入

第一行一个数N,代表射击轮数。

第二行 N个数a[i],第 i个数为a[i]。

1≤N≤100,000

1≤a[i]<998244353

输出

不难证明答案可以表示成一个最简分数 p \ q -1*。

你需要输出三个p \ q -1* 对 998244353取模后的结果,以此来表示偏离靶心次数为 0 , 1 , 2时的概率。

其中q-1q 在模意义下的逆元,满足q-1\ q* = 1 mod 998244353。

例如1/4, 可以写成748683265,原因是4 * 748683265 % 998244353 = 1,也有且仅有x = 748683265,1 <= x < 998244353满足乘积等于1

样例输入

1
2
2
2 2

样例输出

1
748683265 499122177 748683265

规则

请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果
点击“调试”亦可保存代码
编程题可以使用本地编译器,此页面不记录跳出次数