hdu 4414 && hdu 4415

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4414

简单题目,直接枚举

View Code
 1 using namespace std;
 2 typedef long long ll;
 3 const int N = 60;
 4 char map[N][N];
 5 int ans,ans1,ans2,ans3,ans4;
 6 int n;
 7 bool juge(int x,int y,int flag)
 8 {
 9     //cout<<"x = "<<x<<" "<<y<<" "<<flag<<endl;
10     if(flag)
11     {
12         if(x < n && x >= 0 && y - 1 >= 0 && y + 1 < n && map[x][y - 1] == 'o' && map[x][y + 1] == 'o' && map[x][y] == '#')
13         return true;
14         else return false;
15     }
16     if(!flag)
17     {
18         if(x + 1 < n && x - 1 >= 0 && y >= 0 && y < n && map[x - 1][y] == 'o' && map[x + 1][y] == 'o' && map[x][y] == '#')
19         return true;
20         else return false;
21     }
22 }
23 bool dfs(int x,int y)
24 {
25     int temx = x;
26     int temy = y;
27     while(juge(temx - 1,y,1))
28     {
29         ans1 ++;
30         temx --;
31     }
32     temx = x;
33     while(juge(temx + 1,y,1))
34     {
35         ans2 ++;
36         temx ++;
37     }
38     while(juge(x,temy - 1,0))
39     {
40         ans3 ++;
41         temy --;
42     }
43     temy = y;
44     int tt = juge(x,temy + 1,0);
45     while(juge(x,temy + 1,0))
46     {
47         ans4 ++;
48         temy ++;
49     }
50     //cout<<"ans1 = "<<ans1<<" "<<ans2<<" "<<ans3<<" "<<ans4<<endl;
51     if(ans1 == ans2 && ans1 == ans3 && ans1 == ans4 && ans1 != 0)
52     return true;
53     else return false;
54 }
55 int main()
56 {
57     int i,j;
58     //freopen("data.txt","r",stdin);
59     while(cin>>n)
60     {
61         if(!n) break;
62         for(i = 0; i < n; i++)
63         cin>>map[i];
64         ans = 0;
65         for(i = 1; i < n - 1; i++)
66         {
67             for(j = 1; j < n - 1; j++)
68             {
69                 if(map[i - 1][j] == '#' && map[i + 1][j] == '#' && map[i][j - 1] == '#' && map[i][j + 1] == '#' && map[i][j] == '#')
70                 {
71                     ans1 = ans2 = ans3 = ans4 = 0;
72                     if(dfs(i,j)) ans ++;
73                 }
74             }
75         }
76         printf("%d\n",ans);
77     }
78     return 0;
79 }

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4415

想的太简单了,直接贪心做的,找到ai最小的那个敌人并且他的bi不为的零的时候作为入口,然后找下去,但是没考虑如果给的敌人的bi值的和不能把那些bi是零的敌人杀完的话就要分情况考虑了。看了别人的解释还是写了好长时间 http://blog.csdn.net/acm_ted/article/details/8010170 读她的解释,读的都晕了

View Code
 1 using namespace std;
 2 typedef long long ll;
 3 const int N = 100001;
 4 int tt[N];
 5 struct node
 6 {
 7     int val;
 8     int wei;
 9 };
10 node tworm[N];
11 node zworm[N];
12 bool cmp(node a,node b)
13 {
14     return a.val < b.val;
15 }
16 int main()
17 {
18     int t,n,m;
19     int i,j;
20     int tn,zn;
21     node tw;
22     int ans,tsum;
23     int cs = 0;
24     //freopen("data.txt","r",stdin);
25     scanf("%d",&t);
26     while(t--)
27     {
28         _clr(tworm,0);
29         _clr(zworm,0);
30         scanf("%d%d",&n,&m);
31         tn = zn = 0;
32         for(i = 0; i < n; i++)
33         {
34             scanf("%d%d",&tw.val,&tw.wei);
35             if(!tw.wei) zworm[zn ++] = tw;
36             else tworm[tn ++] = tw;
37         }
38         printf("Case %d: ",++cs);
39         sort(zworm,zworm + zn,cmp);
40         sort(tworm,tworm + tn,cmp);
41         int tzn = zn - 1;
42         int maxsum = 0;
43         int maxans = 0;
44         int sum = 0;
45         if(tn > 0 && tworm[0].val <= m)
46         {
47             maxsum += tworm[0].val;
48             maxans = tn;
49             for(i = 0; i < tn; i++)
50             {
51                 if(!i) sum += tworm[i].wei;
52                 else {sum --; sum += tworm[i].wei;}
53             }
54         }
55         for(;sum != 0 && tzn >= 0;)
56         {
57             sum --, maxans ++, tzn --;
58         }
59         if(tzn < 0) printf("%d %d\n",maxans,maxsum);
60         else
61         {
62             m -= maxsum;
63             for(i = 1,j = 0; i < tn && j <= tzn;)
64             {
65                 if(tworm[i].val <= zworm[j].val)
66                 {
67                     if(m >= tworm[i].val)
68                     {
69                         maxans ++, tzn --;
70                         maxsum += tworm[i].val;
71                         m -= tworm[i].val;
72                         i++;
73                     }
74                     else break;
75                 }
76                 else
77                 {
78                     if(m >= zworm[j].val)
79                     {
80                         maxans ++;
81                         maxsum += zworm[j].val;
82                         m -= zworm[j].val;
83                         j++;
84                     }
85                     else break;
86                 }
87             }
88             printf("%d %d\n",maxans,maxsum);
89         }
90     }
91     return 0;
92 }
posted @ 2012-09-23 21:35  AC_Girl  阅读(384)  评论(0编辑  收藏  举报