1001 hdu-5327:http://acm.hdu.edu.cn/showproblem.php?pid=5327
暴力打表即可
#include <iostream> #include "stdio.h" #include "stdlib.h" #include "string.h" #include "math.h" #include <algorithm> using namespace std; int answer[100002]={0}; int judge(int x) { int as[7],pos=0; while(x) { as[pos++]=x%10; x/=10; } if(pos==1) return 1; for(int i=0;i<pos;i++) for(int j=i+1;j<pos;j++) if(as[i]==as[j]) return 0; return 1; } int main() { int t,a,b; scanf("%d",&t); for(int i=1;i<=100000;i++) if(judge(i)) answer[i]=answer[i-1]+1; else answer[i]=answer[i-1]; while(t--) { scanf("%d%d",&a,&b); printf("%d\n",answer[b]-answer[a-1]); } return 0; /* int a,b; while(scanf("%d",&a)!=EOF) { if(judge(a)) printf("yes\n"); else printf("NO\n"); }*/ }
1002 hdu5238:http://acm.hdu.edu.cn/showproblem.php?pid=5328
求序列中最长的数列长度(等比或者等差) #include <iostream> #include "stdio.h" #include "stdlib.h" #include "string.h" #include "math.h" #include <algorithm> using namespace std; long long int ss[1000005]; int main(void) { int t,maxn,n,ans; scanf("%d",&t); while(t--) { maxn=2; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&ss[i]); if(n<=2) { printf("%d\n",n); continue; } ans=2; for(int i=3;i<=n;i++) { if(ss[i-2]+ss[i]==ss[i-1]*2) ans++; else ans=2; maxn=max(ans,maxn); } ans=2; for(int i=3;i<=n;i++) { if(ss[i-2]*ss[i]==ss[i-1]*ss[i-1]) ans++; else ans=2; maxn=max(ans,maxn); } printf("%d\n",maxn); } }1009 hdu5335:http://acm.hdu.edu.cn/showproblem.php?pid=5335
参考了下别人的思路 大致只要往左下角找0即可
#include <iostream> #include "stdio.h" #include "stdlib.h" #include "string.h" #include "math.h" #include <algorithm> using namespace std; #define N 1002 char ss[N][N]; int vis[N][N],que[N]; int n,m,sx,sy,leap,flag; int dir[4][2]={1,0,0,1,-1,0,0,-1}; int isin(int x,int y) { return x>=0&&x<n&&y>=0&&y<m; } void bfs(int x,int y) { int pre,last,tempx,tempy; pre=last=0; memset(que,0,sizeof que); que[last++]=x; que[last++]=y; while(pre<last) { tempx=que[pre++]; tempy=que[pre++]; for(int i=0;i<4;i++) { int nx=tempx+dir[i][0]; int ny=tempy+dir[i][1]; if(!isin(nx,ny)||vis[nx][ny]) continue; vis[nx][ny]=1; if(ss[nx][ny]=='0'){ que[last++]=nx; que[last++]=ny; } if(nx+ny>sx+sy){ sx=nx; sy=ny; } } } } int main() { int t; scanf("%d",&t); while(t--) { memset(vis,0,sizeof(vis)); scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%s",ss[i]); sx=sy=0; vis[0][0]=1; if(ss[0][0]=='0') bfs(0,0); if(ss[sx][sy]=='0') printf("0\n"); else { leap=0; printf("1"); for(int i=sx+sy;i<n+m-2;i++) { flag=0; for(int k=0;k<=i;k++) { int nx=k; int ny=i-k; if(!isin(nx,ny)||!vis[nx][ny]) continue; if(leap&&ss[nx][ny]=='1') continue; for(int j=0;j<2;j++) { int x=nx+dir[j][0]; int y=ny+dir[j][1]; if(!isin(x,y)) continue; vis[x][y]=1; if(ss[x][y]=='0') flag=1; } } leap=flag; printf("%c",flag?'0':'1'); } printf("\n"); } } }