CF#304Div2
2015-06-03 22:16
183 查看
A.Toy Cars
B.Equidistant String
题解:注意当S与T相同的时候,不能变换。
C.Woodcutters
题解:想多了,对于相邻的两棵树来说,如果冲突的话放谁是一样的,不会出现多重影响的情况。所以贪心的去考虑每一个就可以,注意更新边界的情况。
D.Queue
题解:优先队列,但是要加一个判断,如果当前的时间已经不能满足,不如直接把当前点舍弃,即放到最后。
#include <bits/stdc++.h> #define MAX 110 using namespace std; int matrix[MAX][MAX]; int save[MAX]; int main() { int N; int num = 0; scanf("%d",&N); memset(matrix,-1,sizeof(matrix)); for( int i = 1; i <= N; i++ ){ for( int j = 1; j <= N; j++){ scanf("%d",&matrix[i][j]); if( matrix[i][j] == 1 ){ matrix[j][i] = 2; } else if( matrix[i][j] == 2 ){ matrix[j][i] = 1; } else if( matrix[i][j] == 3 ){ matrix[j][i] = 3; } else if( matrix[i][j] == 0 ){ matrix[j][i] = 0; } } } for( int i = 1; i <= N; i++ ){ bool flag = true; for( int j = 1; j <= N; j++ ){ if( matrix[i][j] == 1 || matrix[i][j] == 3 ){ flag = false; break; } } if( flag ){ save[num] = i; num++; } } printf("%d\n",num); for( int i = 0; i < num; i++ ){ if( i != num-1 ){ printf("%d ",save[i]); } else{ printf("%d\n",save[i]); } } return 0; }
B.Equidistant String
题解:注意当S与T相同的时候,不能变换。
#include <bits/stdc++.h> using namespace std; string S,T,P; int main() { cin>>S>>T; int num = 0; if( S.length() != T.length() ){ printf("impossible\n"); return 0; } for( int i = 0; i < (int)S.length(); i++ ){ if( S[i] != T[i] ){ num++; } } if( num%2 != 0 ){ printf("impossible\n"); } else{ int tmp = 0; P = S; for( int i = 0; i < S.length(); i++ ){ if( S[i] != T[i] ){ P[i] = T[i]; tmp++; } if( tmp == num/2 ) break; } cout<<P<<endl; } return 0; }
C.Woodcutters
题解:想多了,对于相邻的两棵树来说,如果冲突的话放谁是一样的,不会出现多重影响的情况。所以贪心的去考虑每一个就可以,注意更新边界的情况。
#include <bits/stdc++.h> #define MAX 100010 using namespace std; int result; int pos[MAX],height[MAX]; int main(){ int N; result = 0; scanf("%d",&N); for( int i = 0; i < N; i++ ){ scanf("%d%d",&pos[i],&height[i]); } for( int i = 0; i < N; i++ ){ if( i == 0 ){ result ++; continue; } if( i == N-1 ){ result ++; continue; } if( pos[i]-height[i] > pos[i-1] ){ result ++; } else if( pos[i]+height[i] < pos[i+1] ){ result ++; pos[i] = pos[i]+height[i]; } } printf("%d\n",result); return 0; }
D.Queue
题解:优先队列,但是要加一个判断,如果当前的时间已经不能满足,不如直接把当前点舍弃,即放到最后。
#include <bits/stdc++.h> using namespace std; priority_queue< int, vector<int>, greater<int> > Q; int main() { int N; scanf("%d",&N); for( int i = 0; i < N; i++ ){ int tmp; scanf("%d",&tmp); Q.push(tmp); } long long time = 0; int res = 0; while( !Q.empty() ){ int tt = Q.top(); Q.pop(); if( time <= tt ){ res++; } time += tt; while( Q.top() < time && !Q.empty() ){ Q.pop(); } } printf("%d\n",res); return 0; }
相关文章推荐
- Collection下的List接口
- 2015`06`03实习面试收获
- Matlab之统计函数
- 简单利用CodeDom动态编译的例子
- [Servlet]什么是Servlet
- oracle存储过程常用技巧
- 再说MySQL中的 table_id
- Add Two Numbers
- Rightmost Digit
- 关于android事件分发的总结
- 腾讯面试3
- 实验三 敏捷开发与XP实践
- Java 基础入门随笔(3) JavaSE版——逻辑运算符、位运算符
- jquery的$.extend和$.fn.extend作用及区别
- 5.2-3
- L21指针基础
- speex编解码在android上实现
- 【资源分享】好用的网站
- L20#和##使用
- L23数组指针分析