cf构造题002-Anti-Sudoku

本文讲解了一种解决Codeforces问题1335D的方法,通过修改9个元素将正常数独转化为反数独,关键在于选择分布在不同行、列和小方块的元素。代码示例展示了如何利用确定的第一个元素来构造满足条件的解。
摘要由CSDN通过智能技术生成

Problem - 1335D - Codeforces

题意:

给定一个正常的数独,要求修改最多9个元素,使得其成为反数独。即要求每行,列,小方块里均有至少两个相同的元素。

解析:

大致模拟样例,发现选取的9个元素分别位于不同行,列,小方块。可以想到确定第一个为(1,1),那么其余的都可以确定,构造一个满足条件的9个位子,并且修改其元素为原先数值加1即可。

代码:

#include<bits/stdc++.h>
using namespace std;
char a[10][10]; 
int dx[9]={1,2,3,4,5,6,7,8,9};
int dy[9]={1,4,7,2,5,8,3,6,9};
int t;
int main()
{
	cin >> t;
	while(t--)
	{
		for(int i = 0;i < 9;i++) cin >> a[i];
		for(int i = 0;i < 9;i++){
			if(a[dx[i]-1][dy[i]-1]=='9') a[dx[i]-1][dy[i]-1]='1';
			else a[dx[i]-1][dy[i]-1]+=1;
		}
		for(int i=0;i<9;i++){
			cout<<a[i]<<endl;
		}
	}
	return 0;
} 

收获:

字符串到数字的变化要注意。可以直接+=1。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值