关于数据结构:拼瓷片和博弈论Theatre-SquareBrave-Game

39次阅读

共计 2299 个字符,预计需要花费 6 分钟才能阅读完成。

瓷片相干的题如同都是相似递推,有本人的法则公式,多推导一下

Theatre Square

Theatre Square in the capital city of Berland has a rectangular shape with the size n × m meters. On the occasion of the city’s anniversary, a decision was taken to pave the Square with square granite flagstones. Each flagstone is of the size a × a.

What is the least number of flagstones needed to pave the Square? It’s allowed to cover the surface larger than the Theatre Square, but the Square has to be covered. It’s not allowed to break the flagstones. The sides of flagstones should be parallel to the sides of the Square.

Input
The input contains three positive integer numbers in the first line: n,  m and a (1 ≤  n, m, a ≤ 109).

Output
Write the needed number of flagstones.

Examples
Input
6 6 4
Output
4

//#include<iostream>
//#include<algorithm>
//#include<string>
//#include<string.h>
//#include<cstdio>
//#include<queue>
//#include<stack> 
//#include<set> 
//#include<vector> 
//using namespace std;
//int main(){
//    int num1,num2,num3;
//    while(cin >> num1 >> num2 >> num3,num1||num2||num3){
//        int ans1,ans2;
//        ans1 = num1/num3;
//        ans2 = num2/num3;
//        if(num1%num3 != 0){
//            ans1++;
//        }
//        if(num2%num3 != 0){
//            ans2++;
//        }
//        cout << (long long)(ans1*ans2) << endl; 
//    }
//    return 0;
//}

Brave Game

十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫《勇敢者的游戏》(英文名称:Zathura),始终到当初,我仍然对于电影中的局部电脑特技印象粗浅。
明天,大家抉择上机考试,就是一种怯懦(brave)的抉择;这个短学期,咱们讲的是博弈(game)专题;所以,大家当初玩的也是“勇敢者的游戏”,这也是我命名这个题目的起因。
当然,除了“怯懦”,我还心愿看到“诚信”,无论考试成绩如何,心愿看到的都是一个实在的后果,我也置信大家肯定能做到的~

各位勇敢者要玩的第一个游戏是什么呢?很简略,它是这样定义的:
1、本游戏是一个二人游戏;
2、有一堆石子一共有 n 个;
3、两人轮流进行;
4、每走一步能够取走 1…m 个石子;
5、最先取光石子的一方为胜;

如果游戏的单方应用的都是最优策略,请输入哪个人能赢。
Input
输出数据首先蕴含一个正整数 C(C<=100),示意有 C 组测试数据。
每组测试数据占一行,蕴含两个整数 n 和 m(1<=n,m<=1000),n 和 m 的含意见题目形容。
Output
如果先走的人能赢,请输入“first”,否则请输入“second”,每个实例的输入占一行。
Sample Input
2
23 2
4 3
Sample Output
first
second

//#include<iostream>
//#include<algorithm>
//#include<string>
//#include<string.h>
//#include<cstdio>
//#include<queue>
//#include<stack> 
//#include<set> 
//#include<vector> 
//using namespace std;
///* 该题目中提到没人遵循的最优策略,是指不能让对方下次一次拿完的最优策略,不是两个人都拿最多的 m 个
// 如,10 4 这组数,f 先拿 4 个,此时 s 不是拿 4 个(这样的话 f 下次拿走完就赢了,不是最优),而是拿 1 个(这样就剩 5 个,f 下一次还是赢不了)// s 第一次拿 1 个剩 5 个,那 f 第二次不论拿多少剩下的都 <= 4(如 f 拿 1 个剩下 4 个),s 第二次都能拿完博得较量!//n%(m+1) == 0 能够了解为:如果你想博得这场较量,即先把石子取完。务必保障你本人最初一次取石子时,残余的石子数小于等于 M。// 所以倒数第二次你的的敌人取石子时务必保障,残余的石子数为 M +1,这样无论他取几个石子(1 到 M 个),你都能在最初一次全副取完!// 即一旦第一个取石子时石子残余数 n 满足 n%(m + 1) == 0, 你作为第二个取石子的人肯定会取得胜利! 
//*/ 
//int main(){
//    int t = 0;
//    cin >> t;
//    while(t--){
//        int n,m;
//        cin >> n >> m;
//        if(n%(m+1) == 0){//            printf("second\n");// 满足就第二个人肯定胜利 
//        }else{//            printf("first\n");
//        }
//    }
//    return 0;
//}

正文完
 0