描述
matrix67發現身高接近的人似乎更合得來。matrix67舉辦的派對共有n(1<=n<=10)個人參加,matrix67需要把他們安排在圓桌上。matrix67的安排原則是,圓桌上任意兩個相鄰人的身高之差不能超過k。請告訴matrix67他共有多少種安排方法。
輸入第一行輸入兩個用空格隔開的數n和k,其中1<=n<=10,1<=k<=1 000 000。
第二行到第n+1行每行輸入乙個人的身高值。所有人的身高都是不超過1 000 000的正整數
輸出輸出符合要求的安排總數
輸入樣例 1
4 10216輸出樣例 1610
2一開始的想法是列舉全排列 然後遍歷判斷
然後wa三個點
想到有可能有重複的數值 所以進行唯一化處理
最後還是wa乙個點
#includeusingview codenamespace
std;
//input
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define ri(n) scanf("%d",&(n))
#define rii(n,m) scanf("%d%d",&n,&m);
#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define rs(s) scanf("%s",s);
#define ll long long
#define rep(i,n) for(int i=0;i
#define clr(a,v) memset(a,v,sizeof a)
/////////////////////////////////
/int
main()
int cnt=0
; sort(a+1,a+1+n);
double first=a[1
];
do
if(fabs(a[1]-a[n])-k>1e-12 )ok=0
;
if(ok)cnt++;
}while(next_permutation(a+1,a+1+n)&&a[1]==first);
cout
<
}
更加簡便的方法 而且可以有效防止重複: 因為是小資料 直接搜尋即可
#includeusingview codenamespace
std;
//input
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define ri(n) scanf("%d",&(n))
#define rii(n,m) scanf("%d%d",&n,&m);
#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define rs(s) scanf("%s",s);
#define ll long long
#define rep(i,n) for(int i=0;i
#define clr(a,v) memset(a,v,sizeof a)
/////////////////////////////////
/int vis[15
];int
first;
int a[15
];int
n,k,cnt;
void dfs(int num,int
last)
rep(i,
1,n)
if(!vis[i]&&abs(last-a[i])<=k)
return;}
intmain()
NOIP模擬 matrix(簡化矩陣)
source noip2016 rzz 1 給出兩個 n n 的矩陣 a b,矩陣每行每列標號 0 n 1 定義這兩個矩陣的乘積 ab 為 現在要在這兩個矩陣上依次進行 q 次修改操作,兩種操作描述如下 在每一次修改操作進行後,輸出矩陣 ab 這兩個矩陣的乘積矩陣 中每個位置元素的權值之和。第一行,...
NOIP提高組模擬賽6
這題看著真熟啊,好像把之前的english,入陣曲雜糅了一下。首先,像入陣曲一樣計算出字首和 s 式子可以轉化為求 s r s l 1 equiv max mod k 像english一樣 用單調棧處理出以x為最大值的區間,分區間求解 每次列舉一側區間,已知max,只要知道另一側有多少與之餘數相同的...
NOIP提高組模擬賽4
丹青千秋釀,一醉解愁腸 無悔少年枉,只願壯志狂 矩陣字首和加暴力 o n 2m 2 60pts有手就行 觀察資料範圍,猜測應該是求一種 o n 3 的演算法,想到之前做的題,應該是 n 2 枚舉行,n 處理乙個序列的答案,然後,就沒有然後了 對於乙個序列,求子段和為k的倍數,如何 o n 求解,考慮...