您的位置:首页 > 其它

CF#304Div2

2015-06-03 22:16 183 查看
A.Toy Cars

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: