Count the Tetris HDU - 1812

本文探讨了一个涉及计数问题的算法题,通过分析不同情况下的操作数量,并利用大数进行精确计算。针对给定的矩阵,文章讨论了如何在允许旋转、翻转等操作下,计算不同的染色方案数目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:

给出n,c,给N*N方格,涂色,方格可以旋转,反转,对角线反转

思路:

要分奇偶讨论:

应为奇偶的指环群是不一样的

最后千万不要忘记对折

n,c过大要开java大数

import java.io.*;
import java.util.*;
import java.math.*;

public class Main {
	 public static void main(String args[]) throws Exception
	    {
	        Scanner cin=new Scanner(System.in);
	        BigInteger c,i4=BigInteger.valueOf(4),i2=BigInteger.valueOf(2);
	        int a1,a2,a3,a4,a5;
	        int n;
	          
	        
	        
	        while(cin.hasNext())
	        {
	        	 n=cin.nextInt();
	        	 c=cin.nextBigInteger();
	        	
	        	 if(n%2==1)
	        	 {
	        		a1=(n*n);
	        		a2=1+(n/2)*(n/2)+(n/2);
	        		a3=2*a2-1;
	        		a4=(n/2+1)*n;
	        	 }
	        	 else
	        	 {
	        		 a1=n*n;
	        		 a2=(n/2)*(n/2);
	        		 a3=2*a2;
		        	 a4=(n/2)*n;
	        	 }
	        	 a5=n+(n*n-n)/2;
	             
	             BigInteger ans= (c.pow(a5).multiply(i2).add(c.pow(a4).multiply(i2).add(c.pow(a1).add(c.pow(a2).add(c.pow(a3).add(c.pow(a2))))))).divide(i4.add(i4));
	             System.out.println(ans);
	             
	        }
	    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值