A. 高斯消元?矩阵? 待定 ……
B. by lanzongwei (18lanzongwei)
/*********************************************************
Flie Name: a.cpp
Author: Liupo
Email: [email protected]
Creat time: 2019年06月04日 星期二 18时29分32秒
*********************************************************/
#include
using namespace std;
mapM, m;
int main(){
int n;
scanf("%d", &n);
string a, t;
cin >> a >> t;
if(a.length() != t.length()){
puts("-1");
return 0;
}
for(int i = 0; i < n; i++)
M[a[i]]++, m[t[i]]++;
if(M != m)puts("-1");
else {
vectorans;
int cnt = 0;
int now = 0;
while(a != t){
for(int i = now; i < n; i++)
if(a[i] != t[i]){
int tem = a.find(t[i], i);
ans.emplace_back(tem);
char aim = a[tem - 1];
a[tem - 1] = a[tem];
a[tem] = aim;
cnt++;
break;
}else now = i;
}
printf("%d\n", cnt);
for(int i = 0; i < cnt; i++)
printf("%d%c", ans[i], " \n"[i == cnt - 1]);
}
return 0;
}
补充:
操作 交换s串中相邻的字母 使 s 串变成 t 串 操作数必须在 (int)1e4 之内 ,
否则输出 - 1
n 的 数目 <= 50 , 所以只要 包含的字母相同,则 s串必能形成 t 串
当此时的是s[i] != t[i] , 要将 s 串中 Index : i 之后的等于t[i] 字符的交换到当前的 i 处,
模拟即可
by Thankyou (18赵宝乐)
要把n首歌曲下载到有限定内存的优盘上,原大小a[i]压缩后大小b[i],问最少压缩几首歌曲?
求一个原大小的和suma, 若suma <= m 无需压缩,输出0 求一个全部压缩后的和sumb,若sumb > m不可能成功,输出-1 排除以上两种情况,贪心选取“压缩量(a[i] - b[i])大”的去压缩,得到答案
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int a[100005];
int b[100005];
int c[100005];
int main()
{
int n, m;
while(cin >> n >> m)
{
long long suma = 0;
long long sumb = 0;
for(int i = 0; i < n; ++i)
{
scanf("%d%d", &a[i], &b[i]);
c[i] = a[i] - b[i];
suma += a[i];
sumb += b[i];
}
if(suma <= m)
{
cout << '0' << '\n';
continue;
}
if(sumb > m)
{
cout << "-1" << '\n';
continue;
}
sort(c, c + n);
int ans = 0;
int idx = n - 1;
while(suma > m)
{
suma -= c[idx--];
ans++;
}
cout << ans << '\n';
}
return 0;
}
D:暴力 by 2017chenshibo (heheda)
#include
using namespace std;
int main() {
ios::sync_with_stdio(0);
long long n, k, s;
cin >> n >> k >> s;
int spot = 0;
long long need = s / (n - 1);
if (need*(n - 1) != s)
spot = 1;
if (need + spot > k || k > s) {
cout << "NO\n";
return 0;
}
cout << "YES\n";
//还剩下k步走s路程
queueans;
long long int now = 1;
while (k) {
//cout << k << " " << s << endl;
if (s - (n - 1) >= k - 1) {
if (now == 1) {
ans.push(n);
now = n;
}
else {
ans.push(1);
now = 1;
}
s -= (n - 1);
}
else {
long long ne = s - (k - 1);
if (now - ne >= 1) {
now -= ne;
}
else {
now += ne;
}
ans.push(now);
s -= ne;
}
k--;
}
int y = 0;
while (!ans.empty()) {
if (y == 0) {
cout << ans.front();
y = 1;
}
else {
cout << " " << ans.front();
}
ans.pop();
}
cout << "\n";
return 0;
}
补充:有 N 个位置 ,要求走K次之后,所走的距离之和 为 S;
先走距离大的,再走距离小的,是总会有位置可走的 。。
1. 从 n - 1 到 1 先除后膜
2. 平均 用 int step = S / K ; int c = S % k;
如果c 有值 先走step + 1 , 再走 step;
E.圆锥的表面积 ,体积
三分 或者 求导
by ignb (18puqiulong)
https://blog.csdn.net/weixin_43237242/article/details/90814905
F. 最大化最小值裸题() by 2017chenshibo (heheda)
#include
using namespace std;
long long mon[100010];
long long n, m;
bool check(long long mid) {
long long sum = 0, num = 1;
for (int i = 1; i <= n; i++ ) {
if (mon[i] > mid) {
return 0;
}
if (sum + mon[i] > mid) {
sum = mon[i];
num++;
}
else {
sum += mon[i];
}
if (num > m)return 0;
}
if (num > m)return 0;
return 1;
}
int main() {
ios::sync_with_stdio(0);
while (cin >> n >> m) {
long long l = 0, r = 0;
for (int i = 1; i <= n; i++) {
cin >> mon[i];
r += mon[i];
}
long long ans = r;
while (l <= r) {
long long mid = (l + r) >> 1;
if (check(mid)) {
ans = mid;
r = mid - 1;
}
else {
l = mid + 1;
}
}
cout << ans << "\n";
}
return 0;
}
补充: 有 N 天 的花费 ,要求 形成 M 个fajomonths ,
使 每个 fajomonths 的花费 的最大值 最小
从边界考虑 对于 第一天 ,一定有一个 fajomonths 包括了第一天,
按照贪心的思想,想要包括更多的 天数 。
二分答案 ,对于每一个 x 最少有多少个fajomonths可以覆盖这 N 天,
若此时的 fajomonths 数量 小于 等于 M ,则 此时答案 成立,因为此时 可以将多余的
fajomonths 分出去。。
G. 二分 套二分 待定……
I 附加题
图论
最小生成树Kruskal 思维题
待定 ……