B
矢量图使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。
include [HTML_REMOVED]
include [HTML_REMOVED]
using namespace std;
int n, ans, i, j;
string s;
char get(int i){
if (i < n)
return s[i];
else
return s[i-n];
}
int main(){
cin >> s;
n = s.size();
ans = 0;
for (i = 1; i <= n-1; i){
for (j = 0; j <= n-1; j)
if (get(i+j) < get(ans+j)){
ans = i; break;
}else if (get(i+j) > get(ans+j))
break;
}
for (j = 0; j <= n-1; j++)
cout<<get(ans+j);
cout<<endl;
}
CBBADADA
ACBBADAD
这个程序实际是在暴力求解字符串的最小表示法,把这个字符串看成一个环,然后找一个从某个位置开始的长度为 nn 的字典序最小的字符串
include[HTML_REMOVED]
using namespace std;
const int SIZE = 100;
int x[SIZE], y[SIZE], f[SIZE];
int n, i, j, max_f, ans;
int main(){
cin>>n;
for (i = 1; i <= n; i)
cin >> x[i] >> y[i];
max_f = 0;
for (i = 1; i <= n; i){
f[i] =①;
for (j = 1; j <= n; j){
if (x[j] < x[i] && ②)
③;
}
if (④){
max_f = f[i];
⑤;
}
}
for (i = 1; i <= n; i)
cout<<f[i]<<endl;
cout<<ans<<endl;
}
填空位置 ①:
0
填空位置 ②:
y[j] < y[i]
填空位置 ③:
f[i]++
填空位置 ④:
f[i] >= max_f
填空位置 ⑤:
ans = i
先大致浏览一遍,可以得出,f[i]f[i] 应该是第 ii 个点的战斗力大小,ansans 应该是战斗力最高的点的编号,max_fmax
f
是战斗力最高的点的战斗力。所以第一空明显应该是赋初值,第二三五三空都比较简单,关键在于第四空,要注意题目中说到,战斗力相同要取编号大的,所以应该要加等于号。
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
const int SIZE = 25;
bool used[SIZE];
int data[SIZE];
int n, m, i, j, k;
bool flag;
int main(){
cin>>n>>m;
memset(used, false, sizeof(used));
for (i = 1; i <= m; i){
data[i] = i;
used[i] = true;
}
flag = true;
while (flag){
for (i = 1; i <= m-1; i)cout<[HTML_REMOVED]= 1; i–){
②;
for (j = data[i]+1; j <= n; j)
if (!used[j]){
used[j] = true;
data[i] =③;
flag = true;
break;
}
if (flag){
for (k = i+1; k <= m; k)
for (j = 1; j <=④; j++)
if (!used[j]){
data[k] = j;
used[j] = true;
break;
}
⑤;
}
}
}
}
填空位置 ①:
false
填空位置 ②:
used[data[i]] = false
填空位置 ③:
j
填空位置 ④:
n
填空位置 ⑤:
break
used[i] == 0表示数字i还没有被使用过,每次倒着找到第一个能变大的数字然后变大,接着把后面的数字直接从小到大安排,就生成了一个新的组合。flagflag 是标记能不能找到一个新的排列,第一层的循环意义是把排列中的第 ii 位给它清零就是第二个空的作用,如果找到一个排列就把后面的排列补全(在剩余的元素中找到最小的排列)然后跳出循环,就是第四和第五个空的意思