X-man

导航

hdu 1571(下沙小面的(1))

充分的用到题目的五条法则:

     过的了测试数据应该就能过了!!

#include<stdio.h>
#include<vector>
#include<string.h>
#include<algorithm>
using namespace std;
vector<int>v;
vector<int>::iterator it;
int main()
{
    int T,N,i,j,k,x;
    int st,ed;
    int a[32][32];
    char s[5];
    int dis;
    while(scanf("%d",&T)!=EOF&&T!=0)
    {
        v.clear();
        memset(a,0,sizeof(a));
        dis=0;//车的路程
        for(i=0;i<T;i++)
        for(j=0;j<T;j++)
        scanf("%d",&a[i][j]);
        scanf("%d",&N);
        st=0;//起始点
        for(i=0;i<N;i++)
        {
            scanf("%s",s);
            if(s[0]=='U')
            {

                scanf("%d",&x);
                if(x!=st)v.push_back(x);//记录乘客目的地,不载现在的地点
            }
            else if(v.size()==6||(s[0]=='G'&&v.size()>0))
            {
                ed=v.front();//记录终点
                //it=v.begin();
                //for(;it!=v.end();it++){ }
                   // printf("%d ",*it);//printf("\n%d\n",ed),
                //if(*it==ed)v.erase(it);//数组减小,删除
                 //v.erase(remove(v.begin(),v.end(),it),v.end());
                 v.erase(remove(v.begin(), v.end(),ed), v.end());        // 真的删除所有
                //printf("\t@@%d %d %d**",st,ed,a[st][ed]);
                dis+=a[st][ed];
                //printf("%d %d\n",a[st][ed],dis);
                st=ed;//一趟完成,记录新的起点
            }
        }
        printf("%d\n",dis);
    }
    return 0;
}

那些打斜杠的地方就是 调试的艰辛啊!!!!!!!!!!!!

主要还是STL用的不好!!!!!!!!!!!!!!!!!!!

       s.erase(it)删除由迭代器it 所指向的元素。

● 在循环内做某些事情(除了删除对象之外):如果容器是标准序列容器,写一个循环来遍历容器元素,每当调用erase时记得都用它的返回值更新你的迭代器。

    for(vector<int>::iterator it=arr.begin(); it!=arr.end(); )
    {
        if(* it == 8)
            it = arr.erase(it);
        else
            ++it;
    }

    /*
        for(vector<int>::iterator it=arr.begin(); it!=arr.end(); it ++)
        {
            if(* it == 8)
            {
                arr.erase(it);     //在erase后,it失效,并不是指向vector的下一个元素,it成了一个“野指针”。
            }
        }
    */

v.erase(remove(v.begin(), v.end(), 99), v.end());包含在<algorithm>中                               // 真的删除所有99

posted on 2013-04-20 16:10  雨钝风轻  阅读(168)  评论(0编辑  收藏  举报