W: Where is the Boundary
Description
Input
Output
Sample Input
2 1
WE
Sample Output
1 2
这个题目就是找一条中线使这条线左边的E和右边的W和最小,如果有多条取左边的
然后思路看代码吧
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
//char mp[N][110];
int E[N],W[N];
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int row,col,en,wn,pos,cnt;
char temp;
while(cin>>col>>row){
// mem(mp,0);
for(int i=0;i<=col+1;++i){
E[i]=W[i]=0;
}
for(int i=0;i<row;++i){
for(int j=1;j<=col;++j){
cin>>temp;
if(temp=='W'){
++W[j];
}else if(temp=='E'){
++E[j];
}
}
}
// for(int i=0;i<=col+1;++i){
// cout<<E[i]<<' ';
// }cout<<endl;
// for(int i=0;i<=col+1;++i){
// cout<<W[i]<<' ';
// }cout<<endl;
for(int i=1;i<=col+1;++i){
E[i]+=E[i-1];
}
for(int i=col;i>=0;--i){
W[i]+=W[i+1];
}
// for(int i=0;i<=col+1;++i){
// cout<<E[i]<<' ';
// }cout<<endl;
// for(int i=0;i<=col+1;++i){
// cout<<W[i]<<' ';
// }cout<<endl;
cnt=INF;
for(int i=0;i<=col;++i){
if(E[i]+W[i+1]<cnt){
pos=i;
cnt=E[i]+W[i+1];
// cout<<i<<' '<<cnt<<endl;
}
}
cout<<pos<<' '<<pos+1<<endl;
}
return 0;
}
/**********************************************************************
Problem: 1691
User: CSUzick
Language: C++
Result: AC
Time:52 ms
Memory:1768 kb
**********************************************************************/