[NOIP09]靶形数独
[成绩](RQNOJ)
[报告]
总而言之:X搜索(按照Lordxfastx的说法)。
花了整天的时间爆出来一个,寻找最小值的算法是用快速选择的——80分
今天中午又思考了很长时间,改成冒泡选择的——95分
忽然顿悟——选择选择!——AC……
其实……当初在余姚的时候写的那个搜索加了很多很多的优化,却也没拿多少分(貌似30~40吧)当时的想法是从中间开始向外搜,能计算的就计算掉——按照当时的贪心策略,过了第一个样例,第2个WA了。然后就改成了搜索。
而这个程序——怎么说呢——我几乎没加任何优化……哎——要是当初在NOIP时写出这个程序,那去年应该有1=了吧……(后悔啊……)
[程序]
// TASK: sudoku
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
using namespace std;
long x[10][10];
long ans;
long a[10][10];long f[10][10][10];
long n;
long ax[90],ay[90];
void draw(long x,long y,long k)
{
for (long i=1;i<=9;i++)
{
f[i][y][k]++;
if (!f[i][y][k])
{
a[i][y]--;
}
f[x][i][k]++;
if (!f[x][i][k])
{
a[x][i]--;
}
}
x=(x-1)/3;y=(y-1)/3;
for (long i=x*3+1;i<=(x+1)*3;i++)
for (long j=y*3+1;j<=(y+1)*3;j++)
{
f[i][j][k]++;
if (!f[i][j][k])
{
a[i][j]--;
}
}
}
void clear(long x,long y,long k)
{
for (long i=1;i<=9;i++)
{
f[i][y][k]--;
if (!f[i][y][k])
{
a[i][y]++;
}
f[x][i][k]--;
if (!f[x][i][k])
{
a[x][i]++;
}
}
x=(x-1)/3;y=(y-1)/3;
| 状态: | Accepted |
| 测评机: | Xeost[5] |
| 得分: | 100分 |
| 提交日期: | 2010-5-18 12:46:00 |
| 有效耗时: | 8531毫秒 |
| 测试结果1: | 通 过本测试点|有效耗时62ms |
| 测试结果2: | 通过本测试点|有效耗时63ms |
| 测 试结果3: | 通过本测试点|有效耗时47ms |
| 测 试结果4: | 通过本测试点|有效耗时62ms |
| 测 试结果5: | 通过本测试点|有效耗时78ms |
| 测 试结果6: | 通过本测试点|有效耗时63ms |
| 测 试结果7: | 通过本测试点|有效耗时62ms |
| 测 试结果8: | 通过本测试点|有效耗时63ms |
| 测 试结果9: | 通过本测试点|有效耗时203ms |
| 测 试结果10: | 通过本测试点|有效耗时125ms |
| 测 试结果11: | 通过本测试点|有效耗时250ms |
| 测 试结果12: | 通过本测试点|有效耗时62ms |
| 测 试结果13: | 通过本测试点|有效耗时500ms |
| 测 试结果14: | 通过本测试点|有效耗时250ms |
| 测 试结果15: | 通过本测试点|有效耗时594ms |
| 测 试结果16: | 通过本测试点|有效耗时672ms |
| 测 试结果17: | 通过本测试点|有效耗时1031ms |
| 测 试结果18: | 通过本测试点|有效耗时2016ms |
| 测 试结果19: | 通过本测试点|有效耗时594ms |
| 测 试结果20: | 通过本测试点|有效耗时1734ms |
[报告]
总而言之:X搜索(按照Lordxfastx的说法)。
花了整天的时间爆出来一个,寻找最小值的算法是用快速选择的——80分
今天中午又思考了很长时间,改成冒泡选择的——95分
忽然顿悟——选择选择!——AC……
其实……当初在余姚的时候写的那个搜索加了很多很多的优化,却也没拿多少分(貌似30~40吧)当时的想法是从中间开始向外搜,能计算的就计算掉——按照当时的贪心策略,过了第一个样例,第2个WA了。然后就改成了搜索。
而这个程序——怎么说呢——我几乎没加任何优化……哎——要是当初在NOIP时写出这个程序,那去年应该有1=了吧……(后悔啊……)
[程序]
// TASK: sudoku
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
using namespace std;
long x[10][10];
long ans;
long a[10][10];long f[10][10][10];
long n;
long ax[90],ay[90];
void draw(long x,long y,long k)
{
for (long i=1;i<=9;i++)
{
f[i][y][k]++;
if (!f[i][y][k])
{
a[i][y]--;
}
f[x][i][k]++;
if (!f[x][i][k])
{
a[x][i]--;
}
}
x=(x-1)/3;y=(y-1)/3;
for (long i=x*3+1;i<=(x+1)*3;i++)
for (long j=y*3+1;j<=(y+1)*3;j++)
{
f[i][j][k]++;
if (!f[i][j][k])
{
a[i][j]--;
}
}
}
void clear(long x,long y,long k)
{
for (long i=1;i<=9;i++)
{
f[i][y][k]--;
if (!f[i][y][k])
{
a[i][y]++;
}
f[x][i][k]--;
if (!f[x][i][k])
{
a[x][i]++;
}
}
x=(x-1)/3;y=(y-1)/3;
为什么来到这,行将终结、匆忙纷扰、并且完全看不到救赎的世界。

浙公网安备 33010602011771号