水题,就是一个暴力。大力出奇迹。

Problem Statement

  There is a narrow passage. Inside the passage there are some wolves. You are given a vector <int>
size that contains the sizes of those wolves, from left to right.





The passage is so narrow that some pairs of wolves cannot pass by each other. More precisely, two adjacent wolves may swap places if and only if the sum of their sizes is
maxSizeSum or less. Assuming that no wolves leave the passage, what is the number of different permutations of wolves in the passage? Note that two wolves are considered different even if they have the same size.





Compute and return the number of permutations of wolves that can be obtained from their initial order by swapping a pair of wolves zero or more times.

Definition

 
Class: NarrowPassage2Easy
Method: count
Parameters: vector <int>, int
Returns: int
Method signature: int count(vector <int> size, int maxSizeSum)
(be sure your method is public)

Limits

 
Time limit (s): 2.000
Memory limit (MB): 256

Constraints

- size will contain between 1 and 6 elements, inclusive.
- Each element in size will be between 1 and 1,000, inclusive.
- maxSizeSum will be between 1 and 1,000, inclusive.

Examples

0)  
 
{1, 2, 3}
3
Returns: 2
From {1, 2, 3}, you can swap 1 and 2 to get {2, 1, 3}. But you can't get other permutations.
1)  
 
{1, 2, 3}
1000
Returns: 6
Here you can swap any two adjacent wolves. Thus, all 3! = 6 permutations are possible.
2)  
 
{1, 2, 3}
4
Returns: 3
You can get {1, 2, 3}, {2, 1, 3} and {2, 3, 1}.
3)  
 
{1,1,1,1,1,1}
2
Returns: 720
All of these wolves are different, even though their sizes are the same. Thus, there are 6! different permutations possible.
4)  
 
{2,4,6,1,3,5}
8
Returns: 60
5)  
 
{1000}
1000
Returns: 1
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define eps 1e-10
///#define M 1000100
///#define LL __int64
#define LL long long
#define INF 0x7fffffff
#define PI 3.1415926535898
#define zero(x) ((fabs(x)<eps)? 0:x) using namespace std; const int maxn = 1000010; int vis[10][10]; class NarrowPassage2Easy
{
public:
int count(vector <int> size, int maxSizeSum)
{
int len = size.size();
memset(vis, 0, sizeof(vis));
for(int i = 1; i <= len; i++)
{
for(int j = i+1; j <= len; j++)
{
int x = size[i-1]+size[j-1];
if(x > maxSizeSum)
{
///vis[i][j] = 1;
vis[j][i] = 1;
}
}
}
for(int i = 1; i <= len; i++)
{
for(int j = 1; j <= len; j++)
{
cout<<vis[i][j]<<" ";
}
cout<<endl;
}
int sum = 0;
if(len == 1) return 1;
if(len == 2)
{
if(size[0]+size[1] > maxSizeSum) return 1;
return 2;
}
if(len == 3)
{
for(int i = 1; i <= len; i++)
{
for(int j = 1; j <= len; j++)
{
if(i == j) continue;
for(int k = 1; k <= len; k++)
{
if(k == i || k == j) continue;
if(vis[i][j] || vis[i][k] || vis[j][k]) continue;
sum++;
}
}
}
}
if(len == 4)
{
for(int i1 = 1; i1 <= len; i1++)
{
for(int i2= 1; i2 <= len; i2++)
{
if(i1 == i2) continue;
for(int i3 = 1; i3 <= len; i3++)
{
if(i1 == i3 || i2 == i3) continue;
for(int i4 = 1; i4 <= len; i4++)
{
if(i1 == i4 || i2 == i4 || i3 == i4) continue;
if(vis[i1][i2] || vis[i1][i3] || vis[i1][i4]
|| vis[i2][i3] ||vis[i2][i4]
||vis[i3][i4]) continue;
sum++;
}
}
}
}
}
if(len == 5)
{
for(int i1 = 1; i1 <= len; i1++)
{
for(int i2= 1; i2 <= len; i2++)
{
if(i1 == i2) continue;
for(int i3 = 1; i3 <= len; i3++)
{
if(i1 == i3 || i2 == i3) continue;
for(int i4 = 1; i4 <= len; i4++)
{
if(i1 == i4 || i2 == i4 || i3 == i4) continue;
for(int i5 = 1; i5 <= len; i5++)
{
if(i1 == i5 || i2 == i5 || i3 == i5 || i4 == i5) continue;
if(vis[i1][i2] || vis[i1][i3] || vis[i1][i4] || vis[i1][i5]
|| vis[i2][i3] ||vis[i2][i4] || vis[i2][i5]
||vis[i3][i4] || vis[i3][i5]
||vis[i4][i5]) continue;
sum++;
}
}
}
}
}
}
if(len == 6)
{
for(int i1 = 1; i1 <= len; i1++)
{
for(int i2= 1; i2 <= len; i2++)
{
if(i1 == i2) continue;
for(int i3 = 1; i3 <= len; i3++)
{
if(i1 == i3 || i2 == i3) continue;
for(int i4 = 1; i4 <= len; i4++)
{
if(i1 == i4 || i2 == i4 || i3 == i4) continue;
for(int i5 = 1; i5 <= len; i5++)
{
if(i1 == i5 || i2 == i5 || i3 == i5 || i4 == i5) continue;
for(int i6 = 1; i6 <= len; i6++)
{
if(i1 == i6 || i2 == i6 || i3 == i6 || i4 == i6 || i6 == i5) continue;
if(vis[i1][i2] || vis[i1][i3] || vis[i1][i4] || vis[i1][i5] || vis[i1][i6]
|| vis[i2][i3] ||vis[i2][i4] || vis[i2][i5] || vis[i2][i6]
||vis[i3][i4] || vis[i3][i5] || vis[i3][i6]
||vis[i4][i5] || vis[i4][i6]
|| vis[i5][i6]) continue;
sum ++;
}
}
}
}
}
}
}
return sum;
}
};
int main()
{
NarrowPassage2Easy a;
vector<int> f;
f.push_back(189);
f.push_back(266);
cout<<a.count(f, 186)<<endl;;
return 0;
}

Topcoder SRM 638 DIV 2 (大力出奇迹)的更多相关文章

  1. TopCoder SRM 560 Div 1 - Problem 1000 BoundedOptimization & Codeforces 839 E

    传送门:https://284914869.github.io/AEoj/560.html 题目简述: 定义"项"为两个不同变量相乘. 求一个由多个不同"项"相 ...

  2. TopCoder SRM 667 Div.2题解

    概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...

  3. TopCoder SRM 596 DIV 1 250

    body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...

  4. Topcoder SRM 656 (Div.1) 250 RandomPancakeStack - 概率+记忆化搜索

    最近连续三次TC爆零了,,,我的心好痛. 不知怎么想的,这题把题意理解成,第一次选择j,第二次选择i后,只能从1~i-1.i+1~j找,其实还可以从j+1~n中找,只要没有被选中过就行... [题意] ...

  5. Topcoder SRM 648 (div.2)

    第一次做TC全部通过,截图纪念一下. 终于蓝了一次,也是TC上第一次变成蓝名,下次就要做Div.1了,希望div1不要挂零..._(:зゝ∠)_ A. KitayutaMart2 万年不变的水题. # ...

  6. [topcoder]SRM 646 DIV 2

    第一题:K等于1或者2,非常简单.略.K更多的情况,http://www.cnblogs.com/lautsie/p/4242975.html,值得思考. 第二题:http://www.cnblogs ...

  7. [topcoder]SRM 633 DIV 2

    第一题,http://community.topcoder.com/stat?c=problem_statement&pm=13462&rd=16076 模拟就可以了. #includ ...

  8. TopCoder SRM 639 Div.2 500 AliceGameEasy

    题意: 一个游戏有n轮,有A和B比赛,谁在第 i 轮得胜,就获得 i 分,给出x,y,问A得x分,B得y分有没有可能,如果有,输出A最少赢的盘数 解题思路: 首先判断n(n+1)/2 = (x+y)是 ...

  9. TopCoder SRM 639 Div.2 500 AliceGameEasy --乱搞

    题意: 一个游戏有n轮,有A和B比赛,谁在第 i 轮得胜,就获得 i 分,给出x,y,问A得x分,B得y分有没有可能,如果有,输出A最少赢的盘数. 解法: 这题是我傻逼了,处理上各种不优越,要使n*( ...

随机推荐

  1. jquery 选择器加变量

    var $role_id = btn.parent().prev().prev().attr('id') var $department_id = btn.parent().prev().prev() ...

  2. Problem b(bzoj 2301)

    Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...

  3. 【CF1020B】Badge(模拟)

    题意:给定n个人,每个人指向第a[i]个人,要求输出从每个人开始第一个被访问到两次的人的编号 n<=1e3 思路: #include<cstdio> #include<cstr ...

  4. C和C++内存分配方式记录

    C. C++中内存分配方式可以分为三种: (1)从静态存储区域分配:内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在.速度快.不容易出错,因为有系统会善后.例如全局变量,static变 ...

  5. AC日记——Destroying The Graph poj 2125

    Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8356   Accepted: 2 ...

  6. [WPF自定义控件库]以Button为例谈谈如何模仿Aero2主题

    1. 为什么选择Aero2 除了以外观为卖点的控件库,WPF的控件库都默认使用"素颜"的外观,然后再提供一些主题包.这样做的最大好处是可以和原生控件或其它控件库兼容,而且对于大部分 ...

  7. SRM1154--Topcoder初体验

    SRM 711 DIV2 <br > 在frank_c1的帮助下,辣鸡Xiejiadong也开始做Topcoder辣...... <br > 这算是一次Topcoder的初体验 ...

  8. Codeforces 401D Roman and Numbers

    题目大意 Description 给定一个数 N(N<1018) , 求有多少个经过 N 重组的数是 M(M≤100) 的倍数. 注意: ①重组不能有前导零; ②重组的数相同, 则只能算一个数. ...

  9. 327. Count of Range Sum

    /* * 327. Count of Range Sum * 2016-7-8 by Mingyang */ public int countRangeSum(int[] nums, int lowe ...

  10. proc_get_status() has been disabled for security reasons

    找到php.ini搜索proc_get_status去掉即可.