Your ways (动态规划)ACM-ICPC Asia Phuket Regional Programing Contest 2009
2015-04-19 19:36
429 查看
F. Your Ways
Time Limit: 3000msMemory Limit: 65536KB
64-bit integer IO format: %lld Java class name:
Main
Submit
Status
PID: 4275
You live in a small well-planned rectangular town in Phuket. The size of the central area of the town is H kilometers x W kilometers. The central area is divided into HW unit blocks, each of size 1 x 1 km2. There are H + 1 streets going in the
West to East direction, and there are W + 1 avenue going in the North-South direction. The central area can be seen as a rectangle on the plane, as shown below.
We can identify each intersection by its co-ordinate on the plane. For example, on the Figure above the bottom-left corner is intersection (0,0), and the top-right corner is intersection (6,3).
Your house is at the bottom-left corner (i.e., intersection (0,0)) and you want to go to the university at the top-right corner (i.e., intersection (W,H)). More over, you only want to go to the university with wasting any efforts;
therefore, you only want to walk from West-to-East and South-to-North directions. Walking this way, in the example above there are 84 ways to reach the university.
You want to go to the university for K days. Things get more complicated when each morning, the city blocks parts of streets and avenues to do some cleaning. The blocking is done in such a way that it is
not possible to reach parts of the streets or avenues which is blocked from some other part which is blocked as well through any paths containing
only West-to-East and South-to-North walks.
You still want to go to the university using
the same West-to-East and South-to-North strategy. You want to find out for each day, how many ways you can reach the university by only walking West-to-East and South-to-North. Since the number can be very big, we only want the result
modulo 2552.
Input
The first line contains an integer T, the number of test cases (1 <= T <= 5). Each test case is in the following format.The first line of each test case contains 3 integers: W, H, and K (1 <= W <= 1,000; 1 <= H <= 1,000; 1 <= K <= 10,000). W and H specify the size of the central area. K denotes the number of days you want to go to the university.
The next K lines describe the information on broken parts of streets and avenues. More specifically, line 1 + i, for 1 <= i <= K, starts with an integer Qi(1 <= Qi <= 100) denoting the number of parts
which are blocked. Then Qi sets of 4 integers describing the blocked parts follow. Each part is described with 4 integers, A, B, C, and D (0 <= A <= C <= W; 0 <= B <= D <= H) meaning that the parts connecting intersection (A,B) and (C,D) is blocked.
It is guaranteed that that part is a valid part of the streets or avenues, also C - A <= 1, and D – B <= 1, i.e., the part is 1 km long.
Output
For each test case, for each day, your program must output the number of ways to go to the universitymodulo 2552 on a separate line. i.e., the output for each test case must contains K lines.
Sample Input
2 2 2 3 1 0 0 0 1 2 1 0 2 0 0 2 1 2 1 1 1 2 1 100 150 2 1 99 150 100 150 2 99 150 100 150 100 149 100 150
Sample Output
3 4 4 1562 0
Hint
The amount of I/O for this task is quite large. Therefore, when reading input, you should avoid using java.io.Scanner which is much slower than using java.io.BufferedReader.题意: 给你一个 w*h 的矩阵 k天 每天有q条路不通 问你从左下角走到右上角有多少方案
Orz。。。比赛被这题坑到了
直接暴力找超时
最后想出来 思路是用 cnt = 最大方案数 - 不通路的方案数
比赛时间结束!55...
#include<bits/stdc++.h> using namespace std; int Map[1003][1003]; int main() { int T; scanf("%d",&T); for(int xi=0; xi<=1001; xi++) Map[xi][0]=Map[0][xi]=1; for(int xi=1; xi<=1001; xi++) for(int yi=xi; yi<=1001; yi++) { Map[xi][yi]+=Map[xi-1][yi]; Map[xi][yi]+=Map[xi][yi-1]; Map[yi][xi]=Map[xi][yi]%=2552; } // for(int i=0;i<10;i++,puts("")) // for(int j=0;j<10;j++) // printf("%d ",Map[i][j]); while(T--) { int x,y,t,sum; scanf("%d%d%d",&x,&y,&t); for(int i=0; i<t; i++) { sum=Map[x][y]; int tt; scanf("%d",&tt); for(int j=0; j<tt; j++) { int x1,x2,y1,y2; scanf("%d%d%d%d",&x1,&y1,&x2,&y2); sum-=Map[x-x2][y-y2]*Map[x1][y1]; // printf("%d %d %d %d\n",x-x2,y-y2,Map[x-x2][y-y2],Map[x1][y1]); sum+=2552*100000; sum%=2552; } printf("%d\n",sum); } } }
相关文章推荐
- ACM-ICPC Asia Phuket Regional Programing Contest 2009----F: Your Ways
- ACM-ICPC Asia Phuket Regional Programing Contest 2009---C:In-circles Again
- ACM-ICPC Asia Phuket Regional Programing Contest 2009----J: Nowhere Money
- zoj 3820 Building Fire Stations The 2014 ACM-ICPC Asia Mudanjiang Regional Contest B题 树的直径
- 4007 Dave(The 36th ACM/ICPC Asia Regional Dalian Site —— Online Contest)
- 2009-2010 ACM-ICPC, NEERC, Western Subregional Contest
- The 37th ACM/ICPC Asia Regional JinHua Site Online Contest - D,F
- hdu 5045 Contest dp+状态压缩 2014 ACM/ICPC Asia Regional Shanghai Online
- 2014-2015 ACM-ICPC, Asia Xian Regional Contest C
- HDU 4033 4036 4039 The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest
- The 36th ACM/ICPC Asia Regional Beijing Site Online Contest - G Panda
- 2014-2015 ACM-ICPC, Asia Tokyo Regional Contest B題:Miscalculation [简单模拟]
- HDOJ 4293暨The 37th ACM/ICPC Asia Regional ChengDu Site Online Contest - F Groups
- HDU 4069 Squiggly Sudoku(DLX)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)
- zoj3822 Domination (The 2014 ACM-ICPC Asia Mudanjiang Regional Contest D题)概率dp
- 【动态规划】HDU 5492 Find a path (2015 ACM/ICPC Asia Regional Hefei Online)
- 【转】The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest 出题报告
- The 36th ACM/ICPC Asia Regional Beijing Site Online Contest - G Panda
- 2009-2010 ACM-ICPC, NEERC, Southern Subregional Contest B kakuro
- 2014-2015 ACM-ICPC, Asia Tokyo Regional Contest C題:Shopping [贪心+并查集]