Noip模拟题解题报告
2018-10-17 11:21
211 查看
Pro
Sol
消失的数字
没难度的一道题,去重之后两个判断即可A。
教训:sort之后才能unique
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n , k , m , a[100005]; int main() { freopen("del.in","r",stdin); freopen("del.out","w",stdout); scanf("%d%d",&n,&k); for(int i=1; i<=n; i++) scanf("%d",&a[i]); sort(a+1 , a+n+1); m = unique(a+1 , a+n+1)-a-1; n = n - m; if(k<n) printf("%d",m); else printf("%d",n+m-k); return 0; }
国际跳棋
大模拟。
一定要注意不要弄错x轴和y轴!还有方向数组,我调了很长很长时间。
#include<iostream> #include<cstdio> using namespace std; int dx[4]={1,-1,-1,1} , dy[4]={1,1,-1,-1}; int ans , map[15][15] , king[15][15] , top , rx[105] , ry[105] , die[15][15]; inline int mymax(int a , int b) { return a>b?a:b; } void dfs1(int x , int y , int num , int px , int py) { if(num>=ans) { if(num>ans) { ans = num; top = 0; } rx[++top] = px; ry[top] = py; } for(int tx=x+1,ty=y+1;tx<=10&&ty<=10;tx++,ty++) { if(!die[tx][ty]&&map[tx][ty]==2) { for(int sx=tx+1,sy=ty+1;sx<=10&&sy<=10;sx++,sy++) { if(!map[sx][sy]) { die[tx][ty] = 1; dfs1(sx , sy , num+1 , px , py); die[tx][ty] = 0; } else break; } } } for(int tx=x+1,ty=y-1;tx<=10&&ty>=1;tx++,ty--) { if(!die[tx][ty]&&map[tx][ty]==2) { for(int sx=tx+1,sy=ty-1;sx<=10&&sy>=1;sx++,sy--) { if(!map[sx][sy]) { die[tx][ty] = 1; dfs1(sx , sy , num+1 , px , py); die[tx][ty] = 0; } else break; } } } for(int tx=x-1,ty=y+1;tx>=1&&ty<=10;tx--,ty++) { if(!die[tx][ty]&&map[tx][ty]==2) { for(int sx=tx-1,sy=ty+1;sx>=1&&sy<=10;sx--,sy++) { if(!map[sx][sy]) { die[tx][ty] = 1; dfs1(sx , sy , num+1 , px , py); die[tx][ty] = 0; } else break; } } } for(int tx=x-1,ty=y-1;tx>=1&&ty>=1;tx--,ty--) { if(!die[tx][ty]&&map[tx][ty]==2) { for(int sx=tx-1,sy=ty-1;sx>=1&&sy>=1;sx--,sy--) { if(!map[sx][sy]) { die[tx][ty] = 1; dfs1(sx , sy , num+1 , px , py); die[tx][ty] = 0; } else break; } } } } void dfs2(int x , int y , int num , int px , int py) { if(num>=ans) { if(num>ans) { ans = num; top = 0; } rx[++top] = px; ry[top] = py; } for(int i=0; i<4; i++) { int tx=x+dx[i] , ty=y+dy[i]; if(!die[tx][ty]&&map[tx][ty]==2&&!map[tx+dx[i]][ty+dy[i]]&&tx+dx[i]>=1&&ty+dy[i]>=1&&tx+dx[i]<=10&&ty+dy[i]<=10) { die[tx][ty] = 1; dfs2(tx+dx[i] , ty+dy[i] , num+1 , px , py); die[tx][ty] = 0; } } } void sol3() { top = 0; for(int i=1; i<=10; i++) for(int j=1; j<=10; j++) { if(map[i][j]!=1) continue; if(king[i][j]) { for(int k=0; k<4; k++) { for(int s=1; s<=10; s++) { int tx=i+s*dx[k] , ty=j+s*dy[k]; if(tx<1||tx>10||ty<1||ty>10||map[tx][ty]) break; rx[++top] = i; ry[top] = j; } } } else { for(int k=1; k<3; k++) { int tx=i+dx[k] , ty=j+dy[k]; if(tx<1||tx>10||ty<1||ty>10||map[tx][ty]) continue; rx[++top] = i; ry[top] = j; } } } } int main() { freopen("chess.in","r",stdin); freopen("chess.out","w",stdout); for(int i=1; i<=10; i++) { string s; cin>>s; for(int j=0; j<10; j++) map[i][j+1] = s[j]-'0'; } for(int i=1; i<=10; i++) { string s; cin>>s; for(int j=0; j<10; j++) king[i][j+1] = s[j]-'0'; } for(int i=1; i<=10; i++) for(int j=1; j<=10; j++) { if(map[i][j]!=1) continue; if(king[i][j]) dfs1(i , j , 0 , i , j); else dfs2(i , j , 0 , i , j); } if(!ans) sol3(); printf("%d\n",top); for(int i=1; i<=top; i++) printf("(%d,%d)\n",rx[i],ry[i]); return 0; }
天上掉馅饼
期望 + dp。
不会,待更。(或许不会更)
阅读更多相关文章推荐
- Noip模拟题解题报告
- Noip模拟题解题报告
- Noip模拟题解题报告
- NOIP模拟题 kun 栈 贪心 解题报告
- 07 noip 树网的核 解题报告
- NOIP 2008 传纸条 解题报告
- NOIP2010 乌龟棋 解题报告(4维DP)
- NOIP 2016 Day2 解题报告
- 洛谷 1083||NOIP 2012 借教室 二分答案+差分 解题报告
- NOIP2015 神奇的幻方 解题报告(水题模拟)
- codevs 1198 NOIP 2012 国王的游戏 高精度 解题报告
- NOIP2008 T3 传纸条 解题报告——S.B.S.
- [NOIP2013 花匠] 新人解题报告
- 纪中训练 day4 【NOIP普及组】模拟赛D组 解题报告
- NOIP2015解题报告
- 20161023 NOIP 模拟赛 T2 解题报告
- NOIP2009解题报告
- NOIP2010解题报告
- NOIP 2000解题报告
- 07noip 统计数字 解题报告