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

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. python中的daemon守护进程实现方法

    原文参考:http://blog.csdn.net/tao_627/article/details/49532021 守护进程是生存期长的一种进程.它们独立于控制终端并且周期性的执行某种任务或等待处理 ...

  2. Number Sequence(poj 1019)

    题意: 有一串数字串,其规律为 1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 1234567891011 1234 ...

  3. 【CF1020C】Elections(贪心)

    题意: Berland地区的腐败现象非常常见. 马上有一场选举,你事先知道了选民和政党的数量,分别为 n 和 m ,对于每一位选民,你知道他将要选举哪一个政党, 不过,每一位选民都会在接受一定数额的金 ...

  4. udp 多播2

    11.3  多播 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信.单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信.实际情况下,经常 ...

  5. LeetCode OJ--Subsets II

    https://oj.leetcode.com/problems/subsets-ii/ 求一个集合的子集,但集合中有重复元素. 求子集的问题,对应着数的二进制,相当于对二进制的一个遍历. #incl ...

  6. AC日记——[SCOI2010]游戏 bzoj 1854

    1854: [Scoi2010]游戏 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4938  Solved: 1948[Submit][Status] ...

  7. AC日记——联合权值 洛谷 P1351

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  8. git上传(本地和远程有冲突时)

    一. 冲突的产生:在上次git同步(上传)之后,本地和远程均有更改 二. 处理 1. 丢弃本地,采用远程: git checkout 冲突文件及其路径 如: git checkout bzrobot_ ...

  9. RabbitMQ 最常用的三大模式

    目录 Direct 模式 Topic 模式 Fanout 模式 Direct 模式 所有发送到 Direct Exchange 的消息被转发到 RouteKey 中指定的 Queue. Direct ...

  10. Leetcode总结之Union Find

    package UnionFind; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; p ...