赞
踩
输 出 n − 最 小 数 的 个 数 。 输出n-最小数的个数。 输出n−最小数的个数。
#include "bits/stdc++.h" using namespace std; void solve() { int _; cin >> _; while(_--) { int n; cin >> n; map<int, int> mp; int mx = 1e9; for(int i = 1;i <= n; i++) { int x; cin >> x; mp[x]++; mx = min(mx, x); } cout << n - mp[mx] << endl; } } signed main() { solve(); }
因 为 猫 B 首 先 呆 在 1 的 位 置 , 所 以 k 要 减 1 , 最 后 位 置 加 1 即 可 。 因为猫B首先呆在1的位置,所以k要减1,最后位置加1即可。 因为猫B首先呆在1的位置,所以k要减1,最后位置加1即可。
当
n
为
奇
数
时
,
直
接
输
出
(
k
−
1
)
%
n
+
1
当n为奇数时,直接输出(k-1)\%n+1
当n为奇数时,直接输出(k−1)%n+1
当
n
为
偶
数
时
,
因
为
会
有
相
遇
问
题
。
当n为偶数时,因为会有相遇问题。
当n为偶数时,因为会有相遇问题。
而
相
遇
时
间
为
(
n
−
1
)
/
2
,
总
相
遇
次
数
为
(
k
−
1
)
(
n
−
1
)
/
2
。
而相遇时间为(n-1)/2,总相遇次数为\frac{(k-1)}{(n-1)/2}。
而相遇时间为(n−1)/2,总相遇次数为(n−1)/2(k−1)。
最
后
位
置
为
(
k
−
1
+
(
k
−
1
)
(
n
−
1
)
/
2
)
%
n
+
1
。
最后位置为(k-1+\frac{(k-1)}{(n-1)/2})\%n+1。
最后位置为(k−1+(n−1)/2(k−1))%n+1。
#include "bits/stdc++.h" using namespace std; void solve() { int _; cin >> _; while(_--) { int n, k; cin >> n >> k; k -= 1; if(n & 1) { cout << (k + k / ((n - 1) / 2)) % n + 1 << endl; } else cout << k % n + 1 << endl; } } signed main() { solve(); }
当 n 为 奇 数 时 , 那 么 每 个 队 都 是 n 2 的 赢 和 输 。 所 以 输 出 1 、 − 1 、 1... 即 可 。 当n为奇数时,那么每个队都是\frac{n}{2}的赢和输。所以输出1、-1、1...即可。 当n为奇数时,那么每个队都是2n的赢和输。所以输出1、−1、1...即可。
当 n 为 偶 数 时 , 那 么 每 个 队 都 是 n 2 − 1 的 赢 和 输 还 有 一 场 平 局 。 当n为偶数时,那么每个队都是\frac{n}{2}-1的赢和输还有一场平局。 当n为偶数时,那么每个队都是2n−1的赢和输还有一场平局。
平 局 场 就 是 1 和 2 , 3 和 4 , 5 和 6 等 等 。 剩 下 场 都 是 一 半 赢 一 半 输 。 平局场就是1和2,3和4,5和6等等。剩下场都是一半赢一半输。 平局场就是1和2,3和4,5和6等等。剩下场都是一半赢一半输。
#include "bits/stdc++.h" using namespace std; void solve() { int _; cin >> _; while(_--) { int n; cin >> n; if(n & 1) { for(int i = 1;i <= (n - 1) * n / 2; i++) { if(i & 1) cout << 1 << " "; else cout << -1 << " "; } } else { int t = 0; while(n--) { t++; for(int i = 1;i <= n; i++){ if(i == 1 && (t & 1)) cout << 0 << " "; else { if(!(i & 1)) cout << 1 << " "; else cout << -1 << " "; } } } } cout << endl; } } signed main() { solve(); }
三 个 条 件 : 三个条件: 三个条件:
问 这 样 ( a , b , c ) 的 组 数 有 多 少 ? 问这样(a,b,c)的组数有多少? 问这样(a,b,c)的组数有多少?
来
化
简
一
下
,
二
式
−
一
式
得
c
2
−
c
=
b
2
+
b
(
c
+
b
)
(
c
−
b
)
=
b
+
c
来化简一下,二式-一式得c^2-c=b^2+b\;\;\;\;\;(c+b)(c-b)=b+c
来化简一下,二式−一式得c2−c=b2+b(c+b)(c−b)=b+c
继
续
化
简
c
−
b
=
1
b
=
c
−
1
,
带
入
一
式
得
2
c
=
a
2
+
1
。
继续化简c-b=1\;\;b=c-1,带入一式得2c=a^2+1。
继续化简c−b=1b=c−1,带入一式得2c=a2+1。
所 以 整 个 条 件 就 变 为 , a 一 定 要 是 奇 数 , 并 且 a ≤ n , 得 : 所以整个条件就变为,a一定要是奇数,并且a\leq n,得: 所以整个条件就变为,a一定要是奇数,并且a≤n,得:
a n s = ⌈ 2 ∗ n − 1 2 ⌉ − 1 ans=\left \lceil \frac{\sqrt{2*n-1}}{2} \right \rceil-1 ans=⌈22∗n−1 ⌉−1
这 个 减 1 是 因 为 c = 1 时 , b = 0 , 错 误 组 。 这个减1是因为c=1时,b=0,错误组。 这个减1是因为c=1时,b=0,错误组。
#include "bits/stdc++.h" using namespace std; typedef long long ll; void solve() { int _; cin >> _; while(_--) { ll n; cin >> n; ll a = sqrt(2 * n - 1); cout << a / 2 + (a % 2 == 1) - 1 << endl; } } signed main() { solve(); }
因为限制只在相邻的两种食物之间,所以我们可以把这个问题分割成三个子问题:对于每种第二种食物来说,与他能在一起且价格最低的食物是谁,对于第三种和第四种同理求即可,最后把答案合并起来。那么如何找最小值,并且在限制关系中又可以有删除的操作呢,就可以用map实现。
#include "bits/stdc++.h" using namespace std; #define endl "\n" #define pb push_back vector<int> a[5], n(5); vector<pair<int, int>> que, tt; map<int, set<int>> mp[5]; void solve() { for (int i = 1; i <= 4; i++) cin >> n[i], a[i].pb(0); for (int i = 1; i <= 4; i++) { for (int j = 1; j <= n[i]; j++) { int x; cin >> x; a[i].pb(x); } } for (int i = 1; i <= 3; i++) { int m; cin >> m; for (int j = 1; j <= m; j++) { int x, y; cin >> x >> y; mp[i][x].insert(y); } } for (int i = 1; i <= n[1]; i++) que.pb({a[1][i], i}); for (int k = 2; k <= 4; k++) { sort(que.begin(), que.end()); for (int i = 1; i <= n[k]; i++) { for (auto j : que) { int x = j.first, y = j.second; if (mp[k - 1][y].find(i) == mp[k - 1][y].end()) { tt.pb({a[k][i] + x, i}); break; } } } que = tt; tt.clear(); } sort(que.begin(), que.end()); if (que.empty()) cout << -1 << endl; else cout << que[0].first << endl; } signed main() { solve(); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。