hihocoder1143矩阵快速幂 & hihocoder 1051 & hihocoder 1049 & hihocoder1066
2015-09-04 09:40
441 查看
hihocoder 1143
hihocoder 1051
如果补交的话那么补交的是连续的一定是最好的。所以只要枚举下连续区间就行了!
hihocoder 1049
1066
[code]#include <cstdio> #include <iostream> #include <map> #include <vector> using namespace std; int A[2][2]; int B[2][2]; const int mod = 19999997; int mul(int a[][2],int b[][2]){ int C[2][2] = {0}; for(int i = 0;i < 2;i++){ for(int j = 0;j < 2;j++){ for(int k = 0;k < 2;k++){ C[i][j] = ( C[i][j] + (long long )a[i][k] * b[k][j])%mod; } } } for(int i = 0 ;i < 2;i++){ for(int j = 0;j < 2;j++){ a[i][j] = C[i][j]; } } } int fun(int n){ B[0][0] = 1;B[0][1] = 0; B[1][0] = 0;B[1][1] = 1; while(n > 0){ if(n&1){ mul(B,A); } mul(A,A); n >>= 1; } return B[0][0]; } int main(){ int n; A[0][0] = 1;A[0][1] = 1; A[1][0] = 1;A[1][1] = 0; cin >> n; cout << fun(n) << endl; return 0; }
hihocoder 1051
[code]#include <cstdio> #include <iostream> using namespace std; int a[105]; int main(){ int t; cin >> t; while(t--){ int n,k; cin >> n>> k; for(int i = 1;i <= n;i++){ scanf("%d",&a[i]); } a[0] = 0; a[n+1] = 101; int l = 1; int r = 1; int ma = 0; while(l <= r){ while(r < l + k && r <= n) r++; if(a[r] - a[l-1]-1 > ma){ ma = a[r] - a[l-1] - 1; } l++; } cout << ma << endl; } return 0; }
如果补交的话那么补交的是连续的一定是最好的。所以只要枚举下连续区间就行了!
hihocoder 1049
[code]#include <cstdio> #include <iostream> #include <cstring> using namespace std; char pre[30]; char mid[30]; char ans[30]; void fun(int pl,int pr,int ml,int mr,int loc){ int i; if(pr < pl) return ; if(mr < ml) return ; for(i = ml;i < mr;i++){ if(mid[i] == pre[pl]){ ans[loc] = mid[i]; break; } } int lenl = i - ml; int lenr = mr - i-1; if(lenl > 0) fun(pl+1,pl+lenl+1,ml,i,loc-lenr-1); if(lenr > 0) fun(pl+lenl+1,pr,i+1,mr,loc-1); } int main(){ scanf("%s%s",pre,mid); int len = strlen(pre); fun(0,len,0,len,len-1); printf("%s\n",ans); return 0; }
1066
[code]#include <cstdio> #include <string> #include <map> #include <iostream> using namespace std; int n; map<string,int> ma; int cnt = 1; int f[200005]; int getfa(int x){ return f[x] == x ? x : f[x] = getfa(f[x]); } int main(){ int n; cin >> n; cnt = 1; for(int i = 1;i <= 2*n;i++){ f[i] = i; } for(int i = 0;i < n;i++){ int x; string a,b; cin >> x >> a >> b; if(ma[a] == 0){ ma[a] = cnt++; } if(ma[b] == 0){ ma[b] = cnt++; } int fa = getfa(ma[a]); int fb = getfa(ma[b]); if(x == 0){ f[fa] = fb; } else{ if(fa == fb){ printf("yes\n"); } else{ printf("no\n"); } } } return 0; }
相关文章推荐
- [LeetCode] Populating Next Right Pointers in Each Node I, II
- css命名规范
- aliyun CentOS6.5 上 svn 安装笔记
- HDOJ2043(JAVAset容器练习)
- 在Ubuntu中安装Redis
- HTTP 错误 500.21 - Internal Server Error 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipe
- linux 数据盘挂载
- TQ2440 学习笔记—— 19、内存管理单元MMU
- Android Studio 开篇
- eclipse中纯java配置log4j日志
- The server does not support version 3.0 of the J2EE Web module specification
- 被骗了
- 网络层和运输层的区别
- Use the SVN command-line tool
- VBA 读取数据创建选择分支,输出txt文档
- 系统设计题
- C++单例模式的模板基类
- 【POJ2771】【最大二分匹配】【反向图最小独立集】
- AspectJ报错:error at ::0 can't find referenced pointcut XXX
- HDOJ 4501 小明系列故事——买年货 DP