zoukankan      html  css  js  c++  java
  • [扫雷][游戏] 交互*2

    由于是校内训练赛 就不贴网址啦【贴了你也进不去2333

    扫雷是T1嘛 反正就很水

    先随机找几个点然后 枚举随机种子S是啥就可以了

    然后这道题开启了机房疯狂hack的节奏QAQ

    交互的本地测试可以直接把代码贴到grader后面就可以啦/xyx

    #include "mine.h"
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    #include<ctime>
    #define inf 12251225
    #define ll long long
    #define mxn 40
    using namespace std;
    
    int vis[mxn][mxn],f[mxn][mxn]; // 9 unvisited
    bool ban[mxn][mxn];
    int xx[8] = {-1,-1,-1,0,0,1,1,1};
    int yy[8] = {1,0,-1,1,-1,1,0,-1};
    void sweep(int W, int H, int K)
    {
    	int times = 0;
    	srand(time(0));
    	for(int i=0;i<W;i++)	for(int j=0;j<H;j++)
    		vis[i][j] = 9;
    	while(times<6)
    	{
    		int x = rand()%W,y = rand()%H;
    		if(vis[x][y]!=9)	continue;
    		int opt = open(x,y); vis[x][y] = opt;
    		if(opt == -1)	times++;
    	}
    	for(int S = 100;S <= 10000;S++)
    	{
    		int cnt = 0,tmp = S;
    		memset(ban,0,sizeof(ban));
    		while(cnt < K)
    		{
    			tmp = (ll)48271 * tmp % 2147483647;
    			int r = (tmp/H)%W, c = tmp%H;
    			if(!ban[r][c])
    			{
    				ban[r][c] = 1;
    				cnt++;
    			}
    		}
    		int www = 0;
    		for(int x=0;x<W&&!www;x++)
    		for(int y=0,qaq=0;y<H;y++,qaq=0)
    		{
    			if(!ban[x][y])
    			for(int i=0;i<8;i++)
    			{
    				int tx = x+xx[i],ty = y+yy[i];
    				if(tx<0||ty<0||tx>=W||ty>=H||!ban[tx][ty])	continue;
    				qaq++;
    			}
    			else	qaq=-1;
    			if(vis[x][y]!=9&&vis[x][y]!=qaq){www=1;break;}
    		}
    		if(!www)	break;
    	}
    	for(int x=0;x<W;x++)	for(int y=0;y<H;y++)
    	{
    		if(vis[x][y]!=9||ban[x][y])	continue;
    		open(x,y);
    	}
    }

    游戏有点神仙

    就是我们通过比较前后两次的差来确定哪个是正确的

    然后记录一个前缀和就可以减少后半部分的查询次数

    然后通过多发爆oj以及按照得分更改查询次数【大雾 就可以阿掉这道题啦

    #include<cstdio>
    #include "guess.h"
    #include<algorithm>
    #include<cmath>
    #define N 1000
    using namespace std;
    std::string ans;
    int vis[1100][1100];
    int qry(int l,int r)
    {
    	if(~vis[l][r])	return vis[l][r];
    	return vis[l][r] = query(l,r);
    }
    int f[2],pre[1100];
    std::string guess()
    {
    	memset(vis,-1,sizeof(vis));
    	ans = '';
    	for(int i=0;i<=50;i++)
    	{
    		f[0] = f[1] = 0;
    		int r = N-1;
    		while(abs(f[0] - f[1]) < 3)
    		{
    			int now = qry(i,r), nxt = qry(i+1,r);
    			if(nxt <= now && now-nxt <=1)
    				f[now-nxt] ++;
    			r--;
    		}
    		ans += (f[0]>f[1]?'0':'1');
    		pre[i+1] = pre[i] + f[1]>f[0];
    	}
    	
    	for(int i=51;i<N;i++)
    	{
    		f[0] = f[1] = 0;
    		int l = 0;
    		while(abs(f[0] - f[1]) < 3)
    		{
    			int now = qry(l,i), del = now - (pre[i] - pre[l]);
    			if(del == 0 || del == 1)	f[del]++;
    			l++;
    		}
    		ans+=(f[0]>f[1]?'0':'1');
    		pre[i+1] = pre[i] + f[1]>f[0];
    	}
    	return ans;
    }

    mmp为什么没有高亮QAQ

  • 相关阅读:
    php内存管理机制、垃圾回收机制
    Redis 3.2.1集群搭建
    centos开启IPV6配置方法
    /etc/hosts.allow和/etc/hosts.deny详解
    3元购买微信小程序解决方案一个月
    linux下使用ntfs-3g挂载NTFS出错
    腾讯云微信小程序域名变更指南
    nginx开启gzip压缩
    centos 7使用yum安装docker容器
    linux中启动网卡报错:Bringing up interface eth1: Error: Connection activation failed
  • 原文地址:https://www.cnblogs.com/hanyuweining/p/10321876.html
Copyright © 2011-2022 走看看