FJNU2018低程F jq解救fuls (贪心乱搞)题解
题目描述
fuls被关在一个机关中,想要解救fuls必须解答出机关的问题,在机关上会显示两个整数N和M,jq必须在机关上输入N个只包含'A'和'C'的字符形成串str,
在这个串中存在f(i,j),i<j,表示str[i]=='C'和str[j]=='A'的一个反AC对,此字符串必须包含刚好M个反AC对,如果有多个长度为N的串满足条件,那么字典序最大的那个才是正确的。
字典序大小:
若字符串a>字符串b即存在位置i使得0<=j<i,a[j]==b[j],a[i]>b[i]。
输入
接下来t行每行包含两个整数N和M(1<=N<=60,0<=M<=N*(N-1)/2)
输出
样例输入
2
5 4
3 3
样例输出
CCCCA
jq lost fuls!
附送几组数据:
10 23
CCCCCACAAA
10 22
CCCCCAACAA
10 0
CCCCCCCCCC
思路:在队友AC的瞬间想到了思路...
问题可以理解为就是给你长度n,求字典序最大的、CA对数为m的答案。显然长度为n的串CA对数最大为Max = (n / 2) * (n - n / 2)。那么超过这个值就不存在答案。
显然A越少整个串就可能字典序越大,那么我们从A为0开始找,找到这种情况下形成最多的CA对数(即(n-a)*a),如果当前A的个数形成的CA对数已经>=m了,那么显然A最多就这么多了。
假设此时A个数为a,C的个数为c=n-a,此时已经满足c*a>=m。我们可以知道,如果交换CA,那么CA对数会减少1,那么我们只要不断逼近m,最后一直减一就能减到m了。所以我们不断减小c,但是继续满足c*a>=m,那么终有一天,会变成c*a>=m并且(c-1)*a<m,这时候已经逼近成功了。注意一下移动时只需要移动最后一个C就行了。然后在最后还没填完的地方加C。
为了防止有人误入此地看不懂题解,我决定模拟一下过程:
10 23
a = 0,最大0个CA对,pass
a = 1,最大9个CA对,pass
a = 2,最大16个CA对,pass
a = 3,最大21个CA对,pass
a = 4,最大24个CA对,开始逼近
c = 6,a = 4,显然c不可能再小了,此时的串为CCCCCCAAAA,值为24
移动最后一个C,变成CCCCCACAAA,值为23,末尾也不用填C,真相只有一个答案是CCCCCACAAA
代码:
#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
const int maxn = + ;
const int seed = ;
const ll MOD = 1e9 + ;
const int INF = 0x3f3f3f3f;
char ans[];
int main(){
int t;
scanf("%d", &t);
for(int p = ; p < t; p++){
int n , m;
scanf("%d%d", &n, &m);
int Max = (n / ) * (n - n / );
if(m > Max){
printf("jq lost fuls!\n");
}
else{
int len = n;
int C, A;
for(int i = ; i <= m; i++){
int c = len - i, a = i;
if(c + a <= len && c * a >= m){
while((c - ) * a >= m && a != ) c--;
C = c;
A = a;
break;
}
}
for(int i = ; i <= C + A; i++){
if(i <= C){
ans[i] = 'C';
}
else{
ans[i] = 'A';
}
}
int M = C * A;
int now = C;
while(m < M){
swap(ans[now], ans[now + ]);
now++;
M--;
}
for(int i = ; i <= C + A; i++)
printf("%c", ans[i]);
for(int i = ; i <= n - C - A; i++)
printf("C");
printf("\n");
}
}
return ;
}
FJNU2018低程F jq解救fuls (贪心乱搞)题解的更多相关文章
- FJNU2018低程A 逃跑路线(Lucas + 中国剩余定理 + LGV定理)题解
题目描述 n个人在w*h的监狱里面想要逃跑,已知他们的同伙在坐标(bi,h)接应他们,他们现在被关在(ai,1)现在他们必须要到同伙那里才有逃出去的机会,这n个人又很蠢只会从(x,y)->(x+ ...
- [luoguP1053] 篝火晚会(贪心 + 乱搞)
传送门 假设第一个位置是1,那么枚举它的左右两边是谁,有两种情况,然后可以递推求出序列. 然后可以贪心,两个序列有多少个不同的数,答案就是多少,具体为啥,yy一下即可 然后就是判断递推求出的序列和目标 ...
- CodeForces 509C Sums of Digits(贪心乱搞)题解
题意:a是严格递增数列,bi是ai每一位的和,告诉你b1~bn,问你怎样搞才能让an最小 思路:让ai刚好大于ai-1弄出来的an最小.所以直接模拟贪心,如果当前位和前一个数的当前位一样并且后面还能生 ...
- hdu4714树形DP+贪心(乱搞)
Tree2cycle A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, we need 1 ...
- [CF752D]Santa Claus and a Palindrome(优先队列,贪心乱搞)
题目链接:http://codeforces.com/contest/752/problem/D 题意:给长度为k的n个字符串,每一个字符串有权值,求构造一个大回文串.使得权值最大. 因为字符串长度都 ...
- Codeforces 723c [贪心][乱搞]
/* 不要低头,不要放弃,不要气馁,不要慌张. 题意: 给一个n和m. 第二行给n个数. 每次操作可以把n个数中的任何一个数替代为别的数,问最少的操作次数使得1.2.3.4.5...m中的数出现的次数 ...
- Codeforces 732e [贪心][stl乱搞]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...
- “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】
黑白图像直方图 发布时间: 2017年7月9日 18:30 最后更新: 2017年7月10日 21:08 时间限制: 1000ms 内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...
- 贪心(qwq)习题题解
贪心(qwq)习题题解 SCOI 题解 [ SCOI2016 美味 ] 假设已经确定了前i位,那么答案ans一定属于一个区间. 从高位往低位贪心,每次区间查找是否存在使此位答案为1的值. 比如6位数确 ...
随机推荐
- RRDtool 安装和使用
一.RRDtool 的功能及使用介绍 定义:RRDtool(Round Robin Database Tool)是一个用来处理定量数据的开源高性能数据库. 1.RRDtool 的特性 由于 RRDto ...
- Keras 资料
http://www.360doc.com/content/17/0415/12/1489589_645772879.shtml http://adventuresinmachinelearning. ...
- 【Linux学习十】负载均衡带来tomcat的session不一致问题
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 tomcat7 jdk7 session不一致是指web服务器(tom ...
- ext2文件系统的运行—superblock/inode/block
鸟哥私房菜书上内容: superblock:记录此 filesystem 的整体信息,包括inode/block的总量.使用量.剩余量, 以及文件系统的格式与相关信息等:inode:记录文件的属性,一 ...
- array_contains 分析函数使用演示
Hive中的array_contains函数与SQL中的 in关键字 操作类似,用于判定 包含(array_contains)或不包含(!array_contains)关系.与 in不同的是array ...
- 两眼论&矩阵变现理论结合打造赚钱大模式
两眼论&矩阵变现理论结合打造赚钱大模式 围棋有一个基本规则,就是一块棋有两只真眼,就是活棋. 围棋没有复杂的规则,它最有趣的地方是没有太多的规则和限制,由此演变出了大千世界,所以古人云“棋如人 ...
- [转载]WebService使用的一些总结
什么是WebService: 这个不用我在这里废话,网上的资料一搜一大把,如果你没有接触过这方面的知识,你可以先去网上查一下.这里我只想说一下我印象比较深刻的几点: WebService是基于soap ...
- Python+OpenCV图像处理(十一)—— 图像金字塔
简介:图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构.简单来说,图像金字塔就是用来进行图像缩放的. 进行图像缩放可以用图像金字塔,也可以使用 ...
- Tomcat配置Manager管理员
修改文件: D:\MyDev\Tomcat\apache-tomcat-7.0.68\conf\tomcat-users.xml 配置内容: <role rolename="mana ...
- ZYNQ学习之路1. Linux最小系统构建
https://blog.csdn.net/u010580016/article/details/80430138?utm_source=blogxgwz1 开发环境:window10, vivado ...