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位数确 ...
随机推荐
- python 翻译爬虫
import urllib.request import urllib.parse import json while 1: content=input("请输入要翻译的内容:") ...
- yii2 modules模块配置指南
在Yii2 中模块是可以无限级嵌套的,也就是说,模块可以包含另一个包含模块的模块,我们称前者为父模块,后者为子模块, 子模块必须在父模块的yiibaseModule::modules属性中申明,例如: ...
- yii2验证密码->手机号码短信发送>手机短信发送频繁问题
<?php namespace frontend\models; use Yii; use yii\base\Model; class ChangeMobileSendRequestForm e ...
- Python 6 -- 构建一个Web应用
用Flask Web框架,实现浏览器页面交互.在此之前需要了解web的基本工作流程,可参照https://blog.csdn.net/m0_37466453/article/details/72752 ...
- 什么是Unicode
写这篇博客的原因, 从做软件开始,什么ASCII码, Unicode,UTF-8,UTF-16,UTF-32......这些鬼东西总是经常碰到,只知道这些鬼是编码格式,其他的就啥都不清楚了,既然总是遇 ...
- 大数据和hadoop的一些基础知识
一.前言 大数据这个概念不用我提大家也听过很多了,前几年各种公开论坛.会议等场合言必及大数据,说出来显得很时髦似的.有意思的是最近拥有这个待遇的名词是“人工智能/AI”,当然这是后话. 众所周知,大数 ...
- 区块链3.0 ada Cardano卡尔达诺如何获得一致好评?
区块链3.0 ada Cardano卡尔达诺如何获得一致好评? EOS 的直接竞争对手是以太坊.文章介绍的卡尔达诺(Cardano)的目标就更加远大了,他要同时锁定比特币和以太坊.但大家去网上搜索卡尔 ...
- HTTPS实战之单向验证和双向验证
转载自:https://mp.weixin.qq.com/s/UiGEzXoCn3F66NRz_T9crA 原创: 涛哥 coding涛 6月9日 作者对https 解释的入目三分啊 (全文太长,太懒 ...
- ADC采样对MIC的干扰
使用EFM8SB的MCU做ADC采样,检测MIC Bias的电源,解码android耳机的线控.初始时, ADC的采样频率2KHz, 在录音时后播放,能固定的听到接近2K的一个噪声.示波器探测不到明显 ...
- Promise的简单用法
众所周知的,Javascript是一种单线程的语言,所有的代码必须按照所谓的“自上而下”的顺序来执行.本特性带来的问题就是,一些将来的.未知的操作,必须异步实现.本文将讨论一个比较常见的异步解决方案— ...