hdu 4022 Bombing
生活随笔
收集整理的這篇文章主要介紹了
hdu 4022 Bombing
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1002 Bombing ?The 36th ACM/ICPC Asia Regional Shanghai Site —— Online Contest
本題的思路就是將點映射一下,一次加入map,坐標值變成映射值,這樣在利用靜態鏈表進行處理,因為有可能橫著炸或者豎著炸,所以結構體里加了一個標記is,防止重復統計,下面的應該很好理解了。
#include <iostream> #include <string.h> #include <map> #include <stdio.h> using namespace std; map<int,int> mappp1,mappp2; int n1,n2,k,k1; int get1(int x){if (mappp1.find(x)==mappp1.end()){mappp1.insert(make_pair(x,n1));n1++;return n1-1;}else return mappp1[x]; } int get2(int x){if (mappp2.find(x)==mappp2.end()){mappp2.insert(make_pair(x,n2));n2++;return n2-1;}else return mappp2[x]; } int eHd[100005],eHd1[100005]; struct{int v,next;bool is; }edge[100005],edge1[100005]; void add_edge(int u,int v){edge[k].v=v;edge[k].is=1;edge[k].next=eHd[u];eHd[u]=k++;edge1[k1].v=u;edge1[k1].is=1;edge1[k1].next=eHd1[v];eHd1[v]=k1++; } void init(){memset(eHd1,-1,sizeof(eHd1));memset(eHd,-1,sizeof(eHd));k=0;k1=0;n1=0;n2=0;mappp1.clear();mappp2.clear(); } int main(){int n,m;while(scanf("%d%d",&n,&m)!=EOF&&n+m){init();for(int i=0;i<n;i++){int x,y;scanf("%d%d",&x,&y);add_edge(get1(x),get2(y));}int a,b,out;for(int mm=0;mm<m;mm++){out=0;scanf("%d%d",&a,&b);if(a==0){for(int i=eHd[get1(b)];i!=-1;i=edge[i].next){if(edge[i].is){out++;edge[i].is=0;edge1[i].is=0;}}}else{for(int i=eHd1[get2(b)];i!=-1;i=edge1[i].next){if(edge1[i].is){out++;edge[i].is=0;edge1[i].is=0;}}}printf("%d\n",out);}printf("\n");}return 0; }總結
以上是生活随笔為你收集整理的hdu 4022 Bombing的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是3gp格式?
- 下一篇: 双硬盘笔记本电脑安装WIN10和Ubun