腾讯笔试 9月5日
1. AC100%
#encode:utf-8 import sys n,m = list(map(int,sys.stdin.readline().strip(' ').strip('\n').strip(' ').split(' '))) ws = list(map(int,sys.stdin.readline().strip(' ').strip('\n').strip(' ').split(' '))) As = list(map(int,sys.stdin.readline().strip(' ').strip('\n').strip(' ').split(' '))) import math record = {} for i in range(n): for j in range(n): if i!=j: ta = ws[j]*math.log2(ws[i]) sta = '%.9f'% ta record[sta] = [ws[i],ws[j]] for a in As: ta = math.log2(a) sta = '%.9f' % ta if sta not in record: print("{} {}".format(-1,-1)) else: print("{} {}".format(record[sta][0],record[sta][1]))
2. 二分+积分,AC100%
#encode:utf-8 import sys k,b = list(map(int,sys.stdin.readline().strip(' ').strip('\n').strip(' ').split(' '))) import math l,r = 0.,b*1.0 while r-l>1e-8: mid = (l+r)/2 y1= mid**k y2 = b-mid if y1>= y2: r = mid else: l= mid x1=(l+r)/2 def fun1(x,k): return 1/(k+1)*(x**(k+1)) def fun2(x,b): return -1/2*(x*x)+b*x print(fun2(b,b)-fun2(x1,b)+(fun1(x1,k)-fun1(0,k)))3.搜索,注意Python一定超时,得用C++,AC100%
#include <iostream> #include <vector> #include <string> #include <stdio.h> #include <math.h> #include <queue> using namespace std; vector<string> graph; const int maxn = 1005; int book[maxn][maxn] ; int main() { int n,m; cin>>n>>m; string t; for (int i = 0; i <n ; ++i) { cin>>t; graph.push_back(t); } int nex[8][2] = {{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1},{-2,1},{-1,2}}; int startx,starty; cin>>startx>>starty; startx--; starty--; queue<pair<int,int> > q ; book[startx][starty] =1 ; q.push(make_pair(startx,starty)); int res=0; int x,y,nx,ny; char nflag ; while (q.size()){ x= q.front().first; y= q.front().second; q.pop(); res+=1; nflag='b'; if (graph[x][y]=='b'){ nflag='r'; } for (int i = 0; i < 8; ++i) { nx=x+nex[i][0]; ny=y+nex[i][1]; if (0<=nx &&nx<n &&0<=ny &&ny<m && nflag==graph[nx][ny] &&book[nx][ny]==0){ book[nx][ny]=1; q.push(make_pair(nx,ny)); } } } cout<<res<<endl; return 0; }4. 动态规划AC100%
#encode:utf-8 import sys from collections import deque # sys.setrecursionlimit(1000000) n =int(sys.stdin.readline().strip(' ').strip('\n').strip(' ')) s = sys.stdin.readline().strip(' ').strip('\n').strip(' ') dp = [[1,0,0,0,0] for _ in range(n+2)] res = 0 v2idx = {'S':1,'T':2,'A':3,'R':4} for i in range(2,n+2): idx = v2idx[s[i-2]] for j in range(1,5): if j==idx: dp[i][j] = dp[i - 2][j-1] + dp[i - 1][j] else: dp[i][j] = dp[i-1][j] print(dp[-1][-1])5. 没做,贴一个大佬的代码吧:
#include <iostream> using namespace std; double ans; int main() { int n, m; cin >> n >> m; for(int i=1; i<=m; i++) ans += 2.0 + double(n) / double(i); printf("%.2lf\n", ans); return 0; }