Codeforces Round #490 (Div. 3) B

传送门http://codeforces.com/contest/999/problem/B

一个长度为n的字符串t,将n的因子从大到小排个序(设为a[i]),每次把t的第一个字符到第a[i]个字符reverse一下,最终得到一个怪异的串s。现在给n和s,求t。

最长100个字符,直接模拟好了。先把n分解质因数,然后进行“逆操作”,即把因子从小到大排序,然后把给的串reverse回去。

我在做的时候忘记reverse怎么用了,尴尬。

 1 #include <iostream>
 2 #include <string>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 const int maxn = 110;
 7 int n, a[maxn], cnt;
 8 string t;
 9 int main()
10 {
11     cin >> n >> t;
12     for (int i = 1; i <= n; ++i)
13         if (n % i == 0)
14             a[++cnt] = i;
15     for (int i = 1; i <= cnt; ++i)
16         reverse(t.begin(), t.begin() + a[i]);
17     cout << t;
18     return 0;
19 }

原文地址:https://www.cnblogs.com/lightgreenlemon/p/9211765.html

时间: 2024-07-30 22:07:20

Codeforces Round #490 (Div. 3) B的相关文章

Codeforces Round #490 (Div. 3) F - Cards and Joy

F - Cards and Joy 思路:比较容易想到dp,直接dp感觉有点难,我们发现对于每一种数字要处理的情况都相同就是有 i 张牌 要给 j 个人分, 那么我们定义dp[ i ][ j ]表示 i 张牌给 j 个人分最大的价值可以得到dp方程如下: dp[ i ][ j ] = max(dp[ i - u ][ j - 1 ] + f[ u ] )   u <= k 暴力转移就好了. #include<bits/stdc++.h> #define LL long long #def

Codeforces Round #490 (Div. 3)-赛后补题

D. Equalize the Remainders 思维太僵硬了,我从余数入手,嫩是记录不了每个数要操作多少次.但是如果考虑每个数的贡献,即操作多少次能使得满足条件,就好写了,实际上也是暴力. #include<bits/stdc++.h> #define ll long long #define P pair<int,int> #define pb push_back #define lson root << 1 #define INF (int)2e9 + 7 #

Codeforces Round #490(Div.3) F

题目大意 n个人,每个人有一个lucky number,每个人抽k张卡片. 一个人如果抽到的卡片中有t个lucky number,这个人的价值为h[t]. 求最大的价值和. 解题思路 只需考虑带有lucky number的卡片,因为其他不是某个人的lucky number的卡片不会影响最后的价值. 不同的lucky number是不会相互影响的.因为如果把某个人lucky number放到另一个lucky number不一样的人那里,只会降低最后的总价值.h是升序的. 所以只需考虑有相同luck

Codeforces Round #490 (Div. 3)

A.Mishka and Contest 思路:简单贪心.每次删掉首尾不超过k的元素,直到分别第一次遇到超过k的元素就不再继续删除即可. AC代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cmath> 5 #include <iostream> 6 #include <algorithm> 7 #include <iom

Codeforces Round #428 (Div. 2)

Codeforces Round #428 (Div. 2) A    看懂题目意思就知道做了 #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b; i>=a; --i

Codeforces Round #424 (Div. 2) D. Office Keys(dp)

题目链接:Codeforces Round #424 (Div. 2) D. Office Keys 题意: 在一条轴上有n个人,和m个钥匙,门在s位置. 现在每个人走单位距离需要单位时间. 每个钥匙只能被一个人拿. 求全部的人拿到钥匙并且走到门的最短时间. 题解: 显然没有交叉的情况,因为如果交叉的话可能不是最优解. 然后考虑dp[i][j]表示第i个人拿了第j把钥匙,然后 dp[i][j]=max(val(i,j),min(dp[i-1][i-1~j]))   val(i,j)表示第i个人拿

Codeforces Round #424 (Div. 2) C. Jury Marks(乱搞)

题目链接:Codeforces Round #424 (Div. 2) C. Jury Marks 题意: 给你一个有n个数序列,现在让你确定一个x,使得x通过挨着加这个序列的每一个数能出现所有给出的k个数. 问合法的x有多少个.题目保证这k个数完全不同. 题解: 显然,要将这n个数求一下前缀和,并且排一下序,这样,能出现的数就可以表示为x+a,x+b,x+c了. 这里 x+a,x+b,x+c是递增的.这里我把这个序列叫做A序列 然后对于给出的k个数,我们也排一下序,这里我把它叫做B序列,如果我

[Codeforces] Round #352 (Div. 2)

人生不止眼前的狗血,还有远方的狗带 A题B题一如既往的丝帛题 A题题意:询问按照12345678910111213...的顺序排列下去第n(n<=10^3)个数是多少 题解:打表,输出 1 #include<bits/stdc++.h> 2 using namespace std; 3 int dig[10],A[1005]; 4 int main(){ 5 int aa=0; 6 for(int i=1;;i++){ 7 int x=i,dd=0; 8 while(x)dig[++dd

Codeforces Round #273 (Div. 2)

Codeforces Round #273 (Div. 2) 题目链接 A:签到,仅仅要推断总和是不是5的倍数就可以,注意推断0的情况 B:最大值的情况是每一个集合先放1个,剩下都丢到一个集合去,最小值是尽量平均去分 C:假如3种球从小到大是a, b, c,那么假设(a + b) 2 <= c这个比較明显答案就是a + b了.由于c肯定要剩余了,假设(a + b)2 > c的话,就肯定能构造出最优的(a + b + c) / 3,由于肯定能够先拿a和b去消除c,而且控制a和b成2倍关系或者消除