15省赛题回顾
2016-05-06 09:43
344 查看
D.锐雯上单不给就送
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; struct Matrix { double mat[5][5]; }a; Matrix mul(Matrix a,Matrix b) { Matrix c; for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { c.mat[i][j]=0; for(int k=0;k<5;k++) c.mat[i][j]=(c.mat[i][j]+a.mat[i][k]*b.mat[k][j]); } } return c; } Matrix mod_pow(Matrix p,int n) { Matrix res; memset(res.mat,0,sizeof(res.mat)); for(int i=0;i<5;i++) res.mat[i][i]=1; while(n) { if(n&1) res=mul(res,p); p=mul(p,p); n>>=1; } return res; } int main() { int T,n; freopen("in.txt","r",stdin); cin>>T; while(T--) { cin>>n; for(int i=0;i<5;i++) for(int j=0;j<5;j++) cin>>a.mat[i][j]; int num; cin>>num; if(n==1) { cout<<num<<endl; continue; } Matrix ans=mod_pow(a,n-1); double maxn=0,sum=0,index=0; for(int i=0;i<5;i++) { if((ans.mat[i][num-1]-maxn)>0.0000001) { maxn=ans.mat[i][num-1]; index=i; } } cout<<index+1<<endl; } return 0; }
I.梯田
#include <cstring> #include <iostream> #include <algorithm> #include <cstdio> using namespace std; #define Max 1000005 int map[105][105],vis[105][105]; int n,m,p,q; int dx[]={0,0,-1,1},dy[]={-1,1,0,0}; int ans,h; int dfs(int x,int y) { if(map[x][y]>h||x<0||y<0||x>n+1||y>m+1||vis[x][y]==1) return 0; ans++; vis[x][y]=1; for(int i=0;i<4;i++) { int x0=x+dx[i]; int y0=y+dy[i]; dfs(x0,y0); } return 0; } int main() { int T; freopen("in.txt","r",stdin); cin>>T; while(T--) { int u=-1; cin>>n>>m>>p>>q; memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>map[i][j]; int l=0,r=Max,mid; while(r-l>1) { memset(vis,0,sizeof(vis)); h=mid=(l+r)/2; ans=0; dfs(0,0); ans-=(2*n+2*m+4); // cout<<mid<<" "<<ans<<endl; if(ans<=q&&ans>=p) { u=mid; r=mid; } else if(ans>q) r=mid; else l=mid; } cout<<u<<endl; } }
J.镜像树
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define Max 105 struct node { int l,r; }tree[Max]; int val[Max]; bool flag; int dfs(int x,int y) { if(flag) return 0; if(x==y&&x==0) return 0; if((x==0&&y!=0)||(x!=0&&y==0)) { flag=1; return 0; } if(val[x]!=val[y]) { flag=1; return 0; } dfs(tree[x].l,tree[y].r); dfs(tree[x].r,tree[y].l); return 0; } int main() { int T,u,n; freopen("in.txt","r",stdin); cin>>T; while(T--) { flag=0; memset(tree,0,sizeof(tree)); memset(val,0,sizeof(val)); cin>>n; for(int i=0;i<n;i++) { cin>>u; cin>>tree[u].l>>tree[u].r; } for(int i=1;i<=n;i++) cin>>val[i]; dfs(2,3); if(flag) cout<<"No"<<endl; else cout<<"Yes"<<endl; } return 0; }
相关文章推荐
- 数据库设计(1/9):数据元(Data Elements)
- [Leetcode] 92. Reverse Linked List II
- socket 笔记(二)
- ClassLoader
- Android性能测试工具:Emmagee
- 410c手把手安卓系统控制I2C光流传感器
- ECMAScript 6笔记(let,const 和 变量的解构赋值)
- [Weblogic]startWebLogic.cmd配置JAVA_OPTIONS无效的解决思路与方案
- 0506 打印cgrrct
- XCode环境下的一些基本概念
- 排序问题
- JsonConvert.DeserializeObject 的用法
- Android Performance Case Study
- IOS项目代码行统计
- LeetCode OJ 199. Binary Tree Right Side View
- golang gc 问题(转的)
- 050666 获取tableview的cell
- C++课堂作业(1)
- hash加密 python
- 【代码笔记】判断字符串是否为空