[NOIP09]靶形数独

[成绩](RQNOJ)

状态: 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;
  
posted @ 2010-05-18 12:51  为美好世界献上珂学  阅读(136)  评论(0)    收藏  举报