7.6 I POJ 3185 The Water Bowls

来源:互联网 发布:机锋市场淘宝店 编辑:程序博客网 时间:2024/05/16 14:57

题意:

给20个排成一排的碗,有正有倒,某操作可以一次翻3个碗,求最少操作几次,使得所有碗正过来。

思路:

明显的暴力。

代码:

#include <iostream>#include <algorithm>#include <cstring>#include <map>#include <cstdio>using namespace std;const int maxn=10005;struct Ant{    int x;    char c;}ant[maxn],pos[maxn];bool cmp(Ant a,Ant b){    return a.x<b.x;}bool cmp2(int a,int b){    return ant[a].x<ant[b].x;}int r[maxn],rr[maxn];int l,n,m;int main(){    ios::sync_with_stdio(0);    int T;    cin>>T;    for(int t=1;t<=T;t++){        cin>>l>>m>>n;        map<int,int> point;        for(int i=0;i<n;i++){            cin>>ant[i].x>>ant[i].c;            int flag=(ant[i].c=='R')?1:-1;            pos[i].x=ant[i].x+flag*m;            point[pos[i].x]++;            pos[i].c=ant[i].c;            r[i]=i;        }        sort(r,r+n,cmp2);        sort(pos,pos+n,cmp);        for(int i=0;i<n;i++){            rr[r[i]]=i;        }        cout<<"Case #"<<t<<':'<<endl;        for(int i=0;i<n;i++){            if((pos[rr[i]].x<=l)&&(pos[rr[i]].x>=0)) {                cout<<pos[rr[i]].x<<' ';                if(point[pos[rr[i]].x]>1)cout<<"Turning"<<endl;                else cout<<pos[rr[i]].c<<endl;            }            else cout<<"Fell off"<<endl;        }        cout<<endl;    }    return 0;}

0 0
原创粉丝点击