D-Drop Voicing
题意及分析
题目大意就是给定了两种操作,求其中一种操作使用的次数。
给定一个任意数字排列,要求最后使其顺序排列,即1,2,3,4…n,两个操作一个是把倒数第二个数放到第一位,第二种操作是把第一个数放到最后一位,连续使用一种操作一次操作。
需要数第一种操作使用次数。
代码(AC)
#include<bits/stdc++.h>
using namespace std;
const int N = 505;
int a[2*N],f[2*N];
inline int inc_sub(int l, int r) {
fill(f+l, f+r, 1);
for(int i = l; i < r; i++) {
for(int j = l; j < i; j++) {
if(a[j] < a[i]) f[i] = max(f[i], f[j] + 1);
}
}
int m = 0;
for(int i = l; i < r; i++)
m = max(m, f[i]);
return m;
}
int main() {
//freopen("./1.in","r",stdin);
int n;
scanf("%d",&n);
for(int i = 1; i <= n; i++) {
int t;
scanf("%d",&t);
a[i] = a[i+n] = t;
}
int ans = 0x3f3f3f3f;
for(int i = 1; i <= n; i++) {
memset(f, 0, sizeof(f));
ans = min(ans , n - inc_sub(i, i+n));
}
cout<<ans<<endl;
return 0;
}
I-Hard Math Problem
题意及分析
答案就是2/3,贴一张图解释,因为是无穷大不存在边界的,所以看中间位置,看边缘位置无法理解的
代码
#include<bits/stdc++.h>
using namespace std;
int main() {
printf("0.666667\n");
return 0;
}
F-DPS
题意与分析
根据给定的数字和公式
输出图案,si决定这个图案的长度,唯一值得注意的点就是向上取整怎么做
代码(AC)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 100 + 5;
ll a[N], b[N];
int main() {
int n;
while(scanf("%d",&n) != EOF) {
ll m = 0;
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
m = max(a[i], m);
}
for(int i = 1; i <= n; i++)
b[i] = (50*a[i] + m - 1) / m;//向上取整
for(int i = 1; i <= n; i++) { //n个数据
for(int j = 1; j <= 3; j++) { //分别代表三行
if(j == 2) {
for(int k = 1; k <= b[i]+2; k++) {
if(k == 1 || k == b[i]+2)
cout<<"|";
else if(a[i] == m && k == b[i] + 1)
cout<<"*";
else
cout<<" ";
}
cout<<a[i]<<endl;
}
else {
for(int k = 1; k <= b[i]+2; k++) {
if(k == 1 || k == b[i]+2)
cout<<"+";
else
cout<<"-";
}
cout<<endl;
}
}
}
}
return 0;
}
E-Bogo Sort
题意及分析
说到底就是大数的处理