BZOJ 1501 智慧珠游戏

Description

Input

文件中包含初始的盘件描述,一共有10行,第i行有i个字符。如果第i行的第j个字符是字母”A”至”L”中的一个,则表示第i行第j列的格子上已经放了零件,零件的编号为对应的字母。如果第i行的第j个字符是”.”,则表示第i行第j列的格子上没有放零件。输入保证预放的零件已摆放在盘件中。

Output

如果能找到解,向输出文件打印10行,为放完全部12个零件后的布局。其中,第i行应包含i个字符,第i行的第j个字符表示第i行第j列的格子上放的是哪个零件。如果无解,输出单独的一个字符串‘No solution’(不要引号,请注意大小写)。所有的数据保证最多只有一组解。

Sample Input

.
..
...
....
.....
.....C
...CCC.
EEEHH...
E.HHH....
E.........

Sample Output

B
BK
BKK
BJKK
JJJDD
GJGDDC
GGGCCCI
EEEHHIIA
ELHHHIAAF
ELLLLIFFFF

HINT

Source

暴搜+打表+卡时大法好,哈哈!!!这题老师居然把他当noip模拟题来考,也是醉了~考完后对着数据调也是一晚上和半上午的。。。

  1 #include<cstdio>
  2 #include<cstdlib>
  3 #include<cstring>
  4
  5 using namespace std;
  6
  7 int s[15][15],times;
  8 int mod[15][10][10][2],have[15],num[15]={0,3,4,4,4,5,5,5,5,5,5,5,5};
  9 bool use[15];
 10
 11 inline void finish()
 12 {
 13     for (int i = 1;i <= 10;++i)
 14     {
 15         for (int j = 1;j <= i;++j)
 16             printf("%c",s[i][j]+‘A‘-1);
 17         putchar(‘\n‘);
 18     }
 19 }
 20
 21 inline bool okay(int a,int b,int x,int y)
 22 {
 23     int t = num[a],i;
 24     for (i = 1;i <= t;++i)
 25     {
 26         int tx = x + mod[a][b][i][0];
 27         int ty = y + mod[a][b][i][1];
 28         if (tx < 1 || tx > 10) return false;
 29         if (ty < 1 || ty > tx) return false;
 30         if (s[tx][ty] != 0) return false;
 31     }
 32     return true;
 33 }
 34
 35 inline void give(int a,int b,int x,int y)
 36 {
 37     int t = num[a],i;
 38     for (i = 1;i <= t;++i)
 39     {
 40         int tx = x + mod[a][b][i][0];
 41         int ty = y + mod[a][b][i][1];
 42         s[tx][ty] = a;
 43     }
 44 }
 45
 46 inline void ready()
 47 {
 48     have[1] = 4;
 49     mod[1][1][2][0] = 1; mod[1][1][2][1] = 0;
 50     mod[1][1][3][0] = 0; mod[1][1][3][1] = 1;
 51     //
 52     mod[1][2][2][0] = 0; mod[1][2][2][1] = -1;
 53     mod[1][2][3][0] = 1; mod[1][2][3][1] = 0;
 54     //
 55     mod[1][3][2][0] = 1; mod[1][3][2][1] = 0;
 56     mod[1][3][3][0] = 1; mod[1][3][3][1] = -1;
 57     //
 58     mod[1][4][2][0] = 1; mod[1][4][2][1] = 0;
 59     mod[1][4][3][0] = 1; mod[1][4][3][1] = 1;
 60
 61     //////////////////////////////////////////////////
 62     have[2] = 2;
 63     mod[2][1][2][0] = 0; mod[2][1][2][1] = 1;
 64     mod[2][1][3][0] = 0; mod[2][1][3][1] = 2;
 65     mod[2][1][4][0] = 0; mod[2][1][4][1] = 3;
 66     //
 67     mod[2][2][2][0] = 1; mod[2][2][2][1] = 0;
 68     mod[2][2][3][0] = 2; mod[2][2][3][1] = 0;
 69     mod[2][2][4][0] = 3; mod[2][2][4][1] = 0;
 70
 71     //////////////////////////////////////////////////
 72     have[3] = 8;
 73     mod[3][1][2][0] = 1; mod[3][1][2][1] = 0;
 74     mod[3][1][3][0] = 0; mod[3][1][3][1] = 1;
 75     mod[3][1][4][0] = 0; mod[3][1][4][1] = 2;
 76     //
 77     mod[3][2][2][0] = 0; mod[3][2][2][1] = 1;
 78     mod[3][2][3][0] = 1; mod[3][2][3][1] = 1;
 79     mod[3][2][4][0] = 2; mod[3][2][4][1] = 1;
 80     //
 81     mod[3][3][2][0] = 1; mod[3][3][2][1] = 0;
 82     mod[3][3][3][0] = 1; mod[3][3][3][1] = -1;
 83     mod[3][3][4][0] = 1; mod[3][3][4][1] = -2;
 84     //
 85     mod[3][4][2][0] = 1; mod[3][4][2][1] = 0;
 86     mod[3][4][3][0] = 2; mod[3][4][3][1] = 0;
 87     mod[3][4][4][0] = 2; mod[3][4][4][1] = 1;
 88     //
 89     mod[3][5][2][0] = 1; mod[3][5][2][1] = 0;
 90     mod[3][5][3][0] = 1; mod[3][5][3][1] = 1;
 91     mod[3][5][4][0] = 1; mod[3][5][4][1] = 2;
 92     //
 93     mod[3][6][2][0] = 0; mod[3][6][2][1] = 1;
 94     mod[3][6][3][0] = 1; mod[3][6][3][1] = 0;
 95     mod[3][6][4][0] = 2; mod[3][6][4][1] = 0;
 96     //
 97     mod[3][7][2][0] = 0; mod[3][7][2][1] = 1;
 98     mod[3][7][3][0] = 0; mod[3][7][3][1] = 2;
 99     mod[3][7][4][0] = 1; mod[3][7][4][1] = 2;
100     //
101     mod[3][8][2][0] = 1; mod[3][8][2][1] = 0;
102     mod[3][8][3][0] = 2; mod[3][8][3][1] = 0;
103     mod[3][8][4][0] = 2; mod[3][8][4][1] = -1;
104
105     //////////////////////////////////////////////////
106     have[4] = 1;
107     mod[4][1][2][0] = 1; mod[4][1][2][1] = 0;
108     mod[4][1][3][0] = 0; mod[4][1][3][1] = 1;
109     mod[4][1][4][0] = 1; mod[4][1][4][1] = 1;
110
111     ///////////////////////////////////////////////////
112     have[5] = 4;
113     mod[5][1][2][0] = 1; mod[5][1][2][1] = 0;
114     mod[5][1][3][0] = 2; mod[5][1][3][1] = 0;
115     mod[5][1][4][0] = 2; mod[5][1][4][1] = 1;
116     mod[5][1][5][0] = 2; mod[5][1][5][1] = 2;
117     //
118     mod[5][2][2][0] = 0; mod[5][2][2][1] = 1;
119     mod[5][2][3][0] = 0; mod[5][2][3][1] = 2;
120     mod[5][2][4][0] = 1; mod[5][2][4][1] = 0;
121     mod[5][2][5][0] = 2; mod[5][2][5][1] = 0;
122     //
123     mod[5][3][2][0] = 0; mod[5][3][2][1] = 1;
124     mod[5][3][3][0] = 0; mod[5][3][3][1] = 2;
125     mod[5][3][4][0] = 1; mod[5][3][4][1] = 2;
126     mod[5][3][5][0] = 2; mod[5][3][5][1] = 2;
127     //
128     mod[5][4][2][0] = 1; mod[5][4][2][1] = 0;
129     mod[5][4][3][0] = 2; mod[5][4][3][1] = 0;
130     mod[5][4][4][0] = 2; mod[5][4][4][1] = -1;
131     mod[5][4][5][0] = 2; mod[5][4][5][1] = -2;
132
133     ////////////////////////////////////////////
134     have[6] = 8;
135     mod[6][1][2][0] = 0; mod[6][1][2][1] = 1;
136     mod[6][1][3][0] = 1; mod[6][1][3][1] = 1;
137     mod[6][1][4][0] = 0; mod[6][1][4][1] = 2;
138     mod[6][1][5][0] = 0; mod[6][1][5][1] = 3;
139     //
140     mod[6][2][2][0] = 1; mod[6][2][2][1] = 0;
141     mod[6][2][3][0] = 1; mod[6][2][3][1] = -1;
142     mod[6][2][4][0] = 2; mod[6][2][4][1] = 0;
143     mod[6][2][5][0] = 3; mod[6][2][5][1] = 0;
144     //
145     mod[6][3][2][0] = 1; mod[6][3][2][1] = 0;
146     mod[6][3][3][0] = 1; mod[6][3][3][1] = 1;
147     mod[6][3][4][0] = 1; mod[6][3][4][1] = -1;
148     mod[6][3][5][0] = 1; mod[6][3][5][1] = -2;
149     //
150     mod[6][4][2][0] = 1; mod[6][4][2][1] = 0;
151     mod[6][4][3][0] = 2; mod[6][4][3][1] = 0;
152     mod[6][4][4][0] = 2; mod[6][4][4][1] = 1;
153     mod[6][4][5][0] = 3; mod[6][4][5][1] = 0;
154     //
155     mod[6][5][2][0] = 1; mod[6][5][2][1] = 0;
156     mod[6][5][3][0] = 1; mod[6][5][3][1] = -1;
157     mod[6][5][4][0] = 1; mod[6][5][4][1] = 1;
158     mod[6][5][5][0] = 1; mod[6][5][5][1] = 2;
159     //
160     mod[6][6][2][0] = 1; mod[6][6][2][1] = 0;
161     mod[6][6][3][0] = 1; mod[6][6][3][1] = 1;
162     mod[6][6][4][0] = 2; mod[6][6][4][1] = 0;
163     mod[6][6][5][0] = 3; mod[6][6][5][1] = 0;
164     //
165     mod[6][7][2][0] = 0; mod[6][7][2][1] = -1;
166     mod[6][7][3][0] = 0; mod[6][7][3][1] = -2;
167     mod[6][7][4][0] = 0; mod[6][7][4][1] = 1;
168     mod[6][7][5][0] = 1; mod[6][7][5][1] = 0;
169     //
170     mod[6][8][2][0] = 1; mod[6][8][2][1] = 0;
171     mod[6][8][3][0] = 2; mod[6][8][3][1] = 0;
172     mod[6][8][4][0] = 2; mod[6][8][4][1] = -1;
173     mod[6][8][5][0] = 3; mod[6][8][5][1] = 0;
174
175     ///////////////////////////////////////////////////////////
176     have[7] = 4;
177     mod[7][1][2][0] = 1; mod[7][1][2][1] = 0;
178     mod[7][1][3][0] = 0; mod[7][1][3][1] = 1;
179     mod[7][1][4][0] = 0; mod[7][1][4][1] = 2;
180     mod[7][1][5][0] = 1; mod[7][1][5][1] = 2;
181     //
182     mod[7][2][2][0] = 0; mod[7][2][2][1] = 1;
183     mod[7][2][3][0] = 1; mod[7][2][3][1] = 1;
184     mod[7][2][4][0] = 2; mod[7][2][4][1] = 1;
185     mod[7][2][5][0] = 2; mod[7][2][5][1] = 0;
186     //
187     mod[7][3][2][0] = 1; mod[7][3][2][1] = 0;
188     mod[7][3][3][0] = 1; mod[7][3][3][1] = 1;
189     mod[7][3][4][0] = 1; mod[7][3][4][1] = 2;
190     mod[7][3][5][0] = 0; mod[7][3][5][1] = 2;
191     //
192     mod[7][4][2][0] = 0; mod[7][4][2][1] = 1;
193     mod[7][4][3][0] = 1; mod[7][4][3][1] = 0;
194     mod[7][4][4][0] = 2; mod[7][4][4][1] = 0;
195     mod[7][4][5][0] = 2; mod[7][4][5][1] = 1;
196
197     ////////////////////////////////////////////////////////////
198     have[8] = 8;
199     mod[8][1][2][0] = 1; mod[8][1][2][1] = 0;
200     mod[8][1][3][0] = 0; mod[8][1][3][1] = 1;
201     mod[8][1][4][0] = 1; mod[8][1][4][1] = 1;
202     mod[8][1][5][0] = 0; mod[8][1][5][1] = 2;
203     //
204     mod[8][2][2][0] = 0; mod[8][2][2][1] = 1;
205     mod[8][2][3][0] = 1; mod[8][2][3][1] = 0;
206     mod[8][2][4][0] = 1; mod[8][2][4][1] = 1;
207     mod[8][2][5][0] = 2; mod[8][2][5][1] = 1;
208     //
209     mod[8][3][2][0] = 0; mod[8][3][2][1] = 1;
210     mod[8][3][3][0] = 1; mod[8][3][3][1] = 0;
211     mod[8][3][4][0] = 1; mod[8][3][4][1] = 1;
212     mod[8][3][5][0] = 1; mod[8][3][5][1] = -1;
213     //
214     mod[8][4][2][0] = 1; mod[8][4][2][1] = 0;
215     mod[8][4][3][0] = 1; mod[8][4][3][1] = 1;
216     mod[8][4][4][0] = 2; mod[8][4][4][1] = 0;
217     mod[8][4][5][0] = 2; mod[8][4][5][1] = 1;
218     //
219     mod[8][5][2][0] = 1; mod[8][5][2][1] = 0;
220     mod[8][5][3][0] = 1; mod[8][5][3][1] = 1;
221     mod[8][5][4][0] = 0; mod[8][5][4][1] = 1;
222     mod[8][5][5][0] = 1; mod[8][5][5][1] = 2;
223     //
224     mod[8][6][2][0] = 1; mod[8][6][2][1] = 0;
225     mod[8][6][3][0] = 0; mod[8][6][3][1] = 1;
226     mod[8][6][4][0] = 1; mod[8][6][4][1] = 1;
227     mod[8][6][5][0] = 2; mod[8][6][5][1] = 0;
228     //
229     mod[8][7][2][0] = 0; mod[8][7][2][1] = 1;
230     mod[8][7][3][0] = 0; mod[8][7][3][1] = 2;
231     mod[8][7][4][0] = 1; mod[8][7][4][1] = 1;
232     mod[8][7][5][0] = 1; mod[8][7][5][1] = 2;
233     //
234     mod[8][8][2][0] = 1; mod[8][8][2][1] = 0;
235     mod[8][8][3][0] = 2; mod[8][8][3][1] = 0;
236     mod[8][8][4][0] = 1; mod[8][8][4][1] = -1;
237     mod[8][8][5][0] = 2; mod[8][8][5][1] = -1;
238
239     /////////////////////////////////////////////
240     have[9] = 8;
241     mod[9][1][2][0] = 0; mod[9][1][2][1] = 1;
242     mod[9][1][3][0] = 0; mod[9][1][3][1] = 2;
243     mod[9][1][4][0] = 1; mod[9][1][4][1] = 2;
244     mod[9][1][5][0] = 1; mod[9][1][5][1] = 3;
245     //
246     mod[9][2][2][0] = 1; mod[9][2][2][1] = 0;
247     mod[9][2][3][0] = 2; mod[9][2][3][1] = 0;
248     mod[9][2][4][0] = 2; mod[9][2][4][1] = -1;
249     mod[9][2][5][0] = 3; mod[9][2][5][1] = -1;
250     //
251     mod[9][3][2][0] = 0; mod[9][3][2][1] = 1;
252     mod[9][3][3][0] = 1; mod[9][3][3][1] = 1;
253     mod[9][3][4][0] = 1; mod[9][3][4][1] = 2;
254     mod[9][3][5][0] = 1; mod[9][3][5][1] = 3;
255     //
256     mod[9][4][2][0] = 1; mod[9][4][2][1] = 0;
257     mod[9][4][3][0] = 1; mod[9][4][3][1] = -1;
258     mod[9][4][4][0] = 2; mod[9][4][4][1] = -1;
259     mod[9][4][5][0] = 3; mod[9][4][5][1] = -1;
260     //
261     mod[9][5][2][0] = 0; mod[9][5][2][1] = 1;
262     mod[9][5][3][0] = 1; mod[9][5][3][1] = 0;
263     mod[9][5][4][0] = 1; mod[9][5][4][1] = -1;
264     mod[9][5][5][0] = 1; mod[9][5][5][1] = -2;
265     //
266     mod[9][6][2][0] = 1; mod[9][6][2][1] = 0;
267     mod[9][6][3][0] = 2; mod[9][6][3][1] = 0;
268     mod[9][6][4][0] = 2; mod[9][6][4][1] = 1;
269     mod[9][6][5][0] = 3; mod[9][6][5][1] = 1;
270     //
271     mod[9][7][2][0] = 0; mod[9][7][2][1] = 1;
272     mod[9][7][3][0] = 0; mod[9][7][3][1] = 2;
273     mod[9][7][4][0] = 1; mod[9][7][4][1] = 0;
274     mod[9][7][5][0] = 1; mod[9][7][5][1] = -1;
275     //
276     mod[9][8][2][0] = 1; mod[9][8][2][1] = 0;
277     mod[9][8][3][0] = 1; mod[9][8][3][1] = 1;
278     mod[9][8][4][0] = 2; mod[9][8][4][1] = 1;
279     mod[9][8][5][0] = 3; mod[9][8][5][1] = 1;
280
281     ////////////////////////////////////////////////////////////
282     have[10] = 1;
283     mod[10][1][2][0] = 1; mod[10][1][2][1] = 0;
284     mod[10][1][3][0] = 1; mod[10][1][3][1] = -1;
285     mod[10][1][4][0] = 1; mod[10][1][4][1] = 1;
286     mod[10][1][5][0] = 2; mod[10][1][5][1] = 0;
287
288     ////////////////////////////////////////////////////////////
289     have[11] = 4;
290     mod[11][1][2][0] = 1; mod[11][1][2][1] = 0;
291     mod[11][1][3][0] = 1; mod[11][1][3][1] = 1;
292     mod[11][1][4][0] = 2; mod[11][1][4][1] = 1;
293     mod[11][1][5][0] = 2; mod[11][1][5][1] = 2;
294     //
295     mod[11][2][2][0] = 0; mod[11][2][2][1] = 1;
296     mod[11][2][3][0] = 1; mod[11][2][3][1] = 0;
297     mod[11][2][4][0] = 1; mod[11][2][4][1] = -1;
298     mod[11][2][5][0] = 2; mod[11][2][5][1] = -1;
299     //
300     mod[11][3][2][0] = 0; mod[11][3][2][1] = 1;
301     mod[11][3][3][0] = 1; mod[11][3][3][1] = 1;
302     mod[11][3][4][0] = 1; mod[11][3][4][1] = 2;
303     mod[11][3][5][0] = 2; mod[11][3][5][1] = 2;
304     //
305     mod[11][4][2][0] = 1; mod[11][4][2][1] = 0;
306     mod[11][4][3][0] = 1; mod[11][4][3][1] = -1;
307     mod[11][4][4][0] = 2; mod[11][4][4][1] = -1;
308     mod[11][4][5][0] = 2; mod[11][4][5][1] = -2;
309
310     /////////////////////////////////////////////////////////
311     have[12] = 8;
312     mod[12][1][2][0] = 1; mod[12][1][2][1] = 0;
313     mod[12][1][3][0] = 0; mod[12][1][3][1] = 1;
314     mod[12][1][4][0] = 0; mod[12][1][4][1] = 2;
315     mod[12][1][5][0] = 0; mod[12][1][5][1] = 3;
316     //
317     mod[12][2][2][0] = 0; mod[12][2][2][1] = 1;
318     mod[12][2][3][0] = 1; mod[12][2][3][1] = 1;
319     mod[12][2][4][0] = 2; mod[12][2][4][1] = 1;
320     mod[12][2][5][0] = 3; mod[12][2][5][1] = 1;
321     //
322     mod[12][3][2][0] = 1; mod[12][3][2][1] = 0;
323     mod[12][3][3][0] = 1; mod[12][3][3][1] = -1;
324     mod[12][3][4][0] = 1; mod[12][3][4][1] = -2;
325     mod[12][3][5][0] = 1; mod[12][3][5][1] = -3;
326     //
327     mod[12][4][2][0] = 1; mod[12][4][2][1] = 0;
328     mod[12][4][3][0] = 2; mod[12][4][3][1] = 0;
329     mod[12][4][4][0] = 3; mod[12][4][4][1] = 0;
330     mod[12][4][5][0] = 3; mod[12][4][5][1] = 1;
331     //
332     mod[12][5][2][0] = 1; mod[12][5][2][1] = 0;
333     mod[12][5][3][0] = 1; mod[12][5][3][1] = 1;
334     mod[12][5][4][0] = 1; mod[12][5][4][1] = 2;
335     mod[12][5][5][0] = 1; mod[12][5][5][1] = 3;
336     //
337     mod[12][6][2][0] = 1; mod[12][6][2][1] = 0;
338     mod[12][6][3][0] = 2; mod[12][6][3][1] = 0;
339     mod[12][6][4][0] = 3; mod[12][6][4][1] = 0;
340     mod[12][6][5][0] = 0; mod[12][6][5][1] = 1;
341     //
342     mod[12][7][2][0] = 0; mod[12][7][2][1] = 1;
343     mod[12][7][3][0] = 0; mod[12][7][3][1] = 2;
344     mod[12][7][4][0] = 0; mod[12][7][4][1] = 3;
345     mod[12][7][5][0] = 1; mod[12][7][5][1] = 3;
346     //
347     mod[12][8][2][0] = 1; mod[12][8][2][1] = 0;
348     mod[12][8][3][0] = 2; mod[12][8][3][1] = 0;
349     mod[12][8][4][0] = 3; mod[12][8][4][1] = 0;
350     mod[12][8][5][0] = 3; mod[12][8][5][1] = -1;
351 }
352
353 inline void next(int,int);
354
355 inline void dfs(int,int);
356
357 inline void att(int,int);
358
359 int main()
360 {
361     freopen("1501.in","r",stdin);
362     freopen("1501.out","w",stdout);
363     for (int i = 1;i <= 10;++i)
364     {
365         for (int j = 1;j <= i;++j)
366         {
367             char c= getchar();
368             if (c == ‘.‘) s[i][j] = 0;
369             else s[i][j] = c-‘A‘+1,use[c-‘A‘+1] = true;
370         }
371         getchar();
372     }
373     ready();
374     dfs(1,1);
375     printf("No solution");
376     fclose(stdin); fclose(stdout);
377     return 0;
378 }
379
380 inline void next(int x,int y)
381 {
382     if (y == x)
383         dfs(x+1,1);
384     else dfs(x,y+1);
385 }
386
387 inline void dfs(int x,int y)
388 {
389     if (x > 10)
390     {
391         finish(),exit(0);
392         return;
393     }
394     if (times > 5000000) return;
395     times++;
396     if (s[x][y] == 0)
397         att(x,y);
398     else next(x,y);
399 }
400
401 inline void att(int x,int y)
402 {
403     int temp[15][15];
404     memcpy(temp,s,sizeof(temp));
405     int i,j;
406     for (i = 12;i>=1;--i)
407     {
408         if (use[i]) continue;
409         for (j = 1;j <= have[i];++j)
410             if (okay(i,j,x,y))
411             {
412                 use[i] = true;
413                 give(i,j,x,y);
414                 next(x,y);
415                 memcpy(s,temp,sizeof(s));
416                 use[i] = false;
417             }
418     }
419 }

时间: 2024-10-15 01:24:39

BZOJ 1501 智慧珠游戏的相关文章

bzoj 1501: [NOI2005]智慧珠游戏 Dancing Link

1501: [NOI2005]智慧珠游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 190  Solved: 122[Submit][Status] Description Input 文件中包含初始的盘件描述,一共有10行,第i行有i个字符.如果第i行的第j个字符是字母”A”至”L”中的一个,则表示第i行第j列的格子上已经放了零件,零件的编号为对应的字母.如果第i行的第j个字符是”.”,则表示第i行第j列的格子上没有放零件.输入保证预放的零件已

BZOJ1501 (NOI2005 智慧珠游戏)

传送门@百度 1501: [NOI2005]智慧珠游戏 Time Limit: 5 Sec  Memory Limit: 64 MB Description Input 文件中包含初始的盘件描述,一共有10行,第i行有i个字符.如果第i行的第j个字符是字母”A”至”L”中的一个,则表示第i行第j列的格子上已经放了零件,零件的编号为对应的字母.如果第i行的第j个字符是”.”,则表示第i行第j列的格子上没有放零件.输入保证预放的零件已摆放在盘件中. Output 如果能找到解,向输出文件打印10行,

[BZOJ1501][NOI2005] 智慧珠游戏

Input 文件中包含初始的盘件描述,一共有10行,第i行有i个字符.如果第i行的第j个字符是字母”A”至”L”中的一个,则表示第i行第j列的格子上已经放了零件,零件的编号为对应的字母.如果第i行的第j个字符是”.”,则表示第i行第j列的格子上没有放零件.输入保证预放的零件已摆放在盘件中. Output 如果能找到解,向输出文件打印10行,为放完全部12个零件后的布局.其中,第i行应包含i个字符,第i行的第j个字符表示第i行第j列的格子上放的是哪个零件.如果无解,输出单独的一个字符串‘No so

BZOJ 1501 NOI2005 智慧珠游戏 Dancing-Links(DLX)

题目大意:给定一个10*10的三角形棋盘和12种零件,每种零件只能放一次,可以旋转和翻转,一些零件已经放在了上面,求一种方案,使12个零件无重叠地放在棋盘上 首先这题目一看就是DLX 但是建图真心恶心 需要枚举每一个零件的最多八个朝向的所有位置 我一开始想要全部代码处理 但是后来发现真做不了 于是我选择了打表录入12个零件的所有60种朝向,选择第一排最左面的点作为基点,依次得出每个点关于基点的相对位置,然后再图上枚举基点的位置,若所有点都在图上就加行 一共60*5*2的表 打了40分钟 键盘被敲

bzoj1501: [NOI2005]智慧珠游戏 dancing links

精确覆盖问题,用dancing links求解. 打常量表比较麻烦. #include<bits/stdc++.h> #define FOR(i,s,t)for(node* i=(s)->t;i!=(s);i=i->t) const int f[60][12]={ {0,3,0,0,0,1,1,0}, {0,3,0,0,0,1,1,1}, {0,3,0,0,1,0,1,1}, {0,3,0,1,1,0,1,1}, {1,4,0,0,0,1,0,2,0,3}, {1,4,0,0,1,

【NOI2005】智慧珠游戏,DLX的NOIP坎关。

这道题会做了,NOIP就出什么DLX都不怕了,注意:是NOI"P". 题意:有12个块,可以任意翻转.旋转,即每个块最多有8种表现形式.现在要求你把它们填进图中. 注:每个块只能用一次. DLX建图:列55+12,行若干. 当然,我是会给你算好的数据的. #define N 3000/*每个块"8"种形状就会有2730行*/ #define M 70/*55+12这么多列*/ #define NN 16000/*空图最多15084个点*/ 前55列表示位置,每个位置

BZOJ 2756 奇怪的游戏(最大流)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2756 题意:在一个 N*M 的棋盘上玩,每个格子有一个数.每次 选择两个相邻的格子,并使这两个数都加上 1. 问最少多少次能使棋盘上的数都变成同一个数,如果永远不能变成同一个数则输出-1. 思路:对棋盘进行黑白染色,则每次操作使得黑白两色的格子总和各增加1.设黑色总和s1,个数cnt1:白色总和s2,个数cnt2,设最后的数字为x,那么有: x*cnt1-s1=x*cnt2-s2. (

BZOJ 1413 取石子游戏(DP)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1413 题意:n堆石子排成一排.每次只能在两侧的两堆中选择一堆拿.至少拿一个.谁不能操作谁输. 思路:参考这里. int f1[N][N],f2[N][N],n,a[N]; void deal() { RD(n); int i,j,k; FOR1(i,n) RD(a[i]),f1[i][i]=f2[i][i]=a[i]; int p,q,x; for(k=2;k<=n;k++) for(

BZOJ 1978 取数游戏(DP)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1978 题意:给出一个数列a,在其中找出下标依次增大的数,使得任意相邻的两个数的最大公约数大于等于m.找出最多的数字. 思路:f[i]表示前面的数字中最大公约数为i可以找出的最多的数字个数.那么对于当前数字x: 接着更新f: int f[N],a[N]; int n,m; int main() { RD(n,m); int i; FOR1(i,n) RD(a[i]); int j,k;