1. 程式人生 > >藍橋杯 矩陣翻硬幣(打表+二分)

藍橋杯 矩陣翻硬幣(打表+二分)

網上其他人的答案好像都是用數學方法解決的。

做這道題的時候一看就感覺是找規律的題,所以先打個表。

因為後面要用到大數處理,所以是Java語言

打表程式碼(就是按題目意思暴力):

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;


public class daBiao {

	/**
	 * @param args
	 * @throws FileNotFoundException 
	 */
	public static void main(String[] args) throws FileNotFoundException {
		// TODO Auto-generated method stub
		FileOutputStream fos=new FileOutputStream("out.txt");
		PrintStream ps=new PrintStream(fos);
		System.setOut(ps);
		int m,n;
		int i,j;
		for(m=1;m<100;m++)
			for(n=1;n<100;n++){
				int a[][]=new int[m+1][n+1];
				for(i=0;i<m+1;i++)
					for(j=0;j<n+1;j++)
						a[i][j]=1;
				int k=fun(a,m,n);
				System.out.println(m+" "+n+" "+k);
			}
	}
	
	public static int fun(int a[][],int m,int n){
		int count=0;
		for(int x=1;x<=m;x++)
			for(int y=1;y<=n;y++){
				for(int i=1;i*x<=m;i++)
					for(int j=1;j*y<=n;j++){
						if(i*x<=m&&j*y<=n)
						a[i*x][j*y]=a[i*x][j*y]^1;
					}
			}
		for(int i=1;i<m+1;i++)
			for(int j=1;j<n+1;j++){
				if(a[i][j]==0)
					count++;
			}
		return count;
	}
	
	

}

當然這裡打表用C語言也可以 枚舉了10000組資料之後能很明顯的發現規律,最後要輸出的答案就是sqrt(m)*sqrt(n)。(向下取整)

下面要解決的就是大數的問題了

我這裡用的是二分Java大數

import java.math.BigInteger;
import java.util.Scanner;


public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BigInteger n,m;
		Scanner sc=new Scanner(System.in);
		n=sc.nextBigInteger();
		m=sc.nextBigInteger();
		n=bsqrt(n);
		m=bsqrt(m);
		n=n.multiply(m);
		System.out.println(n);
		
	}
	
	public static BigInteger bsqrt(BigInteger i){
		BigInteger one=new BigInteger("1");
		BigInteger two=new BigInteger("2");
		BigInteger low=new BigInteger("0");
		BigInteger high=i.add(one);
		BigInteger k=i;
		while(low.compareTo(high)<0){
			if(low.equals(high.subtract(BigInteger.ONE))) break;		
			k=high.add(low).divide(two);
			if(k.multiply(k)==i) return k;
			else if((k.multiply(k)).compareTo(i)>0) high=k;
			else low=k;
		}
		
		return low;
	}

}

最後提交的程式碼也就二十多行

成功通過官網所有資料^_^

相關推薦

藍橋 矩陣硬幣+二分

網上其他人的答案好像都是用數學方法解決的。做這道題的時候一看就感覺是找規律的題,所以先打個表。因為後面要用到大數處理,所以是Java語言打表程式碼(就是按題目意思暴力):import java.io.FileNotFoundException; import java.io.

藍橋矩陣硬幣大數開根號

  對於10%的資料,n、m <= 10^3;  對於20%的資料,n、m <= 10^7;  對於40%的資料,n、m <= 10^15;  對於10%的資料,n、m <= 10^1000(10的1000次方)。 我的思路:他是問翻之前有多少個硬幣是反面朝上的,所以這個反面朝上的

藍橋 矩陣硬幣

article compare 畫蛇添足 equals http 等於 最大值 行號 兩個 矩陣翻硬幣 本文轉自 https://blog.csdn.net/xiaofengcanyuelong/article/details/79255105 小明先把硬幣擺成了一個

藍橋-矩陣硬幣

  小明先把硬幣擺成了一個 n 行 m 列的矩陣。   隨後,小明對每一個硬幣分別進行一次 Q 操作。   對第x行第y列的硬幣進行 Q 操作的定義:將所有第 i*x 行,第 j*y 列的硬幣進行翻轉。   其中i和j為任意使操作可行的正整數,行號和列號都是從1開始。   當小明對所有硬幣都進行了一次 Q

矩陣硬幣C++

問題描述   小明先把硬幣擺成了一個 n 行 m 列的矩陣。   隨後,小明對每一個硬幣分別進行一次 Q 操作。   對第x行第y列的硬幣進行 Q 操作的定義:將所有第 i*x 行,第 j*y 列的硬幣進行翻轉。   其中i和j為任意使操作可行的正整數,

藍橋硬幣

問題描述 小明正在玩一個“翻硬幣”的遊戲。 桌上放著排成一排的若干硬幣。我們用 * 表示正面,用 o 表示反面(是小寫字母,不是零)。 比如,可能情形是:**oo***oooo 如果同時翻轉左邊的

ZSTU 4241 聖戰爭ST+二分

esp 戰爭 def 最大值 cal continue online 問題 %d 題目鏈接 ZSTU 4241 問題轉化為有很多區間,現在每次給定一個區間求這個區間和之前所有區間中的某一個的交集的最大長度。 強制在線。 首先我們把所有的區間預處理出來。 然後去重(

【CodeForces - 244B】Undoubtedly Lucky Numbers dfs + 二分

題幹: Polycarpus loves lucky numbers. Everybody knows that lucky numbers are positive integers, whose decimal representation (without leading zeroes

藍橋—合根植物並查集

問題描述   w星球的一個種植園,被分成 m * n 個小格子(東西方向m行,南北方向n列)。每個格子裡種了一株合根植物。   這種植物有個特點,它的根可能會沿著南北或東西方向伸展,從而與另一個格子的植物合成為一體。   如果我們告訴你哪些小格子間出現了連根現象,你能說出這個園中一共有多少株合根

P1217 [USACO1.5]迴文質數 Prime Palindromes輸出

1.先編寫一個程式,求出5-100000000(一億)之間的迴文質數,並且輸出到檔案“huiwenzhishu.txt”,每兩個數字間用","隔開,方便第二個程式定義陣列時直接複製。 可以得到:5-100000000之間的迴文質數為799個,最小的為5,最大的為9989899 程式碼如下

51Nod1010 只包含因子2 3 5的數+ lower_bound

 lower_bound這個函式挺好用的。 #include<iostream> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; c

新手藍橋如何訓練?附帶題庫

給大家介紹下藍橋杯,是近幾年可以說國內名氣最大的程式設計類比賽了 相比國際賽事ACM,藍橋杯入門簡單、中文答題、拿獎率高,更適合國內大眾化參加,近幾年不少學程式設計的學生都在參加這個比賽。 但也有個不好的地方,就是花銷比較高,報名費一次300,另外官方的線上練習

244B】Undoubtedly Lucky Numbers dfs + 二分

題幹: Polycarpus loves lucky numbers. Everybody knows that lucky numbers are positive integers, whose decimal representation (without leadi

2016年藍橋B組初賽第七屆

第一題: 簡單的求和題。 #include<iostream> #include<cmath> using namespace std; int a[110]; int main(){ int i; int

藍橋——趣味素數問題2017.2.3

一、基本素數問題回顧 1. 求給定範圍start~end之間的所有素數(1<=start<end) 原始碼: #include <stdio.h> #include <

藍橋 國王的煩惱 並查集

問題描述 C國由n個小島組成,為了方便小島之間聯絡,C國在小島間建立了m座大橋,每座大橋連線兩座小島。兩個小島間可能存在多座橋連線。然而,由於海水沖刷,有一些大橋面臨著不能使用的危險。

Codeup1085: 階乘的和+貪心

題目描述 有些數可以表示成若干個不同階乘的和。例如,9=1!+2!+3!。小明對這些數很感興趣,所以他給你一個正整數n,想讓你告訴他這個數是否可以表示成若干個不同階乘的和。 輸入 輸入包含多組測試資料。

hdu6304公式

推了好久。。。 這個題肯定是先把an打出來。。1 1 2 2 3 4 4 4 5 6 6 7 8 8 8 8 9 發現從小到大出現,而且除了1,出現次數為二進位制形式最低位的位數。。 然後是求和。。既然和二進位制有關,優先考慮n=2^k的情況。。發現an都是n/2。。然

2015藍橋第五題九分組分數

1,2,3…9 這九個數字組成一個分數,其值恰好為1/3,如何組法? 下面的程式實現了該功能,請填寫劃線部分缺失的程式碼。 #include <stdio.h> void test(int x[]) { int a = x[0]*1

2015藍橋 三羊獻瑞回溯法dfs

觀察下面的加法算式:      祥 瑞 生 輝 +    三 羊 獻 瑞  =三 羊 生 瑞 氣 其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字。 請你填寫“三羊獻瑞”所代表的4位數字(答案