A.digits 2

传送门

题意:给你一个n,要求输出一个每一位数字之和能整除n且其本身也能整除n的数。n不超过100,要求的数不超过10000位数。

题解:直接将n输出n次。

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
int T,n;
for (scanf("%d",&T);T--;) {
scanf("%d",&n);
for (int i = ; i < n; i++)
printf("%d",n);
printf("\n");
}
return ;
}

B.generator 1

传送门

题意:已知x0,x1,a,b,n,mod,xi = a*xi-1 + b*xi-2,求xn%mod

题解:矩阵快速幂,把以二为单位倍增改为以十位单位

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
#define maxn 2
const int N = 1e6 + ;
struct Matrix {
ll ma[maxn][maxn];
Matrix() {
memset(ma,, sizeof(ma));
}
}A,E;
char s[N];
ll mod;
Matrix mul(Matrix A,Matrix B) {
Matrix C;
for(int i=;i<maxn;i++)
for(int j=;j<maxn;j++)
for(int k=;k<maxn;k++)
C.ma[i][j]=(C.ma[i][j]+(A.ma[i][k]*B.ma[k][j]+mod)%mod)%mod;
return C;
}
Matrix pow_mod() {
int len = strlen(s);
for (int i = len - ; i >= ; i--) {
Matrix C = E;
int a = s[i] - '';
for (int j = ; j <= ; j++) {
if (j == a) A = mul(E,A);
E = mul(E ,C);
}
}
return A;
}
int main() {
scanf("%lld%lld%lld%lld%s%lld",&A.ma[][],&A.ma[][],&E.ma[][],&E.ma[][],s,&mod);
E.ma[][] = ;
A = pow_mod();
printf("%lld\n", A.ma[][]);
return ;
}

G.subsequence 1

传送门

题意:告诉你两个由数字组成的字符串s,t,问s串中有多少个子序列所表示的数字比t所表示的数字大。(均不含前导0)

题解:当s的子序列长度比t长时,显然比t大;当子序列长度与t相等时,我们可以通过动态规划来求解。我们用dp[i][j]来表示s串的前i个和t串的前j个相同的方案数。用两层for循环来判断s串的第i为与t串的第j位的大小关系:前i-1个的情况包含在前i个的情况内,所以我们先把dp[i-1][j]赋值给dp[i][j],当s[i] == t[j]时,s串的前i个和t串的前j个相同的方案数还要加上前i-1位和j-1位相同的情况dp[i-1][j-1];当s[i]>t[j]时,前j-1位的选取情况为dp[i-1][j-1],第j位选i,最后m-j个显然在剩下的n-i个字符中任取m-j个都符合。最后我们再加上长度大于t的不包含前导零的子序列个数即可。

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = + ;
const ll mod = ;
ll c[N][N],dp[N][N];
char s[N],t[N];
int main() {
int T,n,m;
c[][] = c[][] = c[][] = ;
for (int i = ; i <= ; i++) {
c[i][] = c[i][i] = ;
for (int j = ; j < i; j++)
c[i][j] = (c[i-][j-]+c[i-][j])%mod;
}
for (scanf("%d",&T);T--;) {
scanf("%d%d%s%s",&n,&m,s+,t+);
dp[][] = ;
ll ans = ;
for (int i = ; i <= n; i++) {
dp[i][] = ;
for (int j = ; j <= min(m,i); j++) {
dp[i][j] = dp[i-][j];
if (s[i] == t[j]) dp[i][j] = (dp[i][j]+dp[i-][j-])%mod;
else if (s[i] > t[j]) {
ans = (ans + c[n-i][m-j] * dp[i-][j-]%mod)%mod;
}
}
}
for (int i = ; i <= n; i++) {
if (s[i] == '') continue;
for (int j = m; j <= n-i; j++)
ans = (ans + c[n-i][j])%mod;
}
printf("%lld\n", ans);
}
return ;
}

H.subsequence 2

题意:有一个长度为n,由m个不同字符组成的字符串,给你m*(m-1)/2组数据,每组第一行给两个字符,给出这字符串中这两个字符一共有多少个,再按字符在字符串中出现的顺序输出。问是否能找到符合条件的字符串,不能的话输出-1,能的话随便输出一个符合条件的字符串。

题解:我们可以将这个字符串看成一个图,根据每个字符类型和它是第几个给它一个编号,再根据前后关系建边,最后通过拓扑序得到序列。要注意字符数量不等于n或者得到的拓扑序个数不等于n时输出-1。

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e4 + ;
char c[],s[N],t[N];
vector<int> V[N*];
int num[],du[N*];
int n,m,len;
bool topo() {
queue<int> q;
for (int i = ; i < ; i++)
if(num[i]> && du[i*+] == )
q.push(i*+);
int cnt = ;
while(q.size()){
int u = q.front();
q.pop();
s[cnt++] = (u-)/ + 'a';
if (cnt > n) return false;
for (int i = ; i < V[u].size(); i++)
if (--du[V[u][i]] == ) q.push(V[u][i]);
}
s[cnt] = '\0';
if (cnt == n) return true;
return false;
}
int main() {
scanf("%d%d",&n,&m);
m = m*(m-)/;
for (int i = ; i < m; i++) {
scanf("%s%d",c,&len);
if (len == ) continue;
scanf("%s",t);
int num0 = , num1 = ,fst = , id;
for (int j = ; j < len; j++) {
if (t[j] == c[]) {
num0++;
id = (t[j]-'a')* + num0;
}else {
num1++;
id = (t[j]-'a')* + num1;
}
if (fst) {
du[id]++;
V[fst].push_back(id);
}
fst = id;
}
if (!num[c[]-'a']) num[c[]-'a'] = num0;
if (!num[c[]-'a']) num[c[]-'a'] = num1;
}
int all = ;
for (int i = ; i < ; i++) all += num[i];
if (all != n) printf("-1\n");
else if (topo()) printf("%s\n", s);
else printf("-1\n");
return ;
}

2019牛客暑期多校第五场题解ABGH的更多相关文章

  1. 2019牛客暑期多校第六场题解ABDJ

    A.Garbage Classification 传送门 题意:给你两个串,第一个串s由小写字母组成,第二个串t由dwh组成,长度为26,分别表示字母a到z代表的字符.现在要你判断: 如果字符串中‘h ...

  2. 2019 牛客暑期多校 第三场 F Planting Trees (单调队列+尺取)

    题目:https://ac.nowcoder.com/acm/contest/883/F 题意:求一个矩阵最大面积,这个矩阵的要求是矩阵内最小值与最大值差值<=m 思路:首先我们仔细观察范围,我 ...

  3. 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)

    题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...

  4. 2019 牛客暑期多校 第八场 A All-one Matrices (单调栈+前缀和)

    题目:https://ac.nowcoder.com/acm/contest/888/A 题意:找全1矩阵的个数,并且这个全1矩阵不被其他全1矩阵包含 思路:这里引用付队说的话 -> { 这类问 ...

  5. [题解] 2019牛客暑期多校第三场H题 Magic Line

    题目链接:https://ac.nowcoder.com/acm/contest/883/H 题意:二维平面上有n个不同的点,构造一条直线把平面分成两个点数相同的部分. 题解:对这n个点以x为第一关键 ...

  6. 【2019牛客暑期多校第三场】J题LRU management

    题目链接 题意 好吧,这道题我其实看都没看过,队友跟我说了说这道题是模拟题,卡时间.然后我就上了-- 大致就是维护一个线性表,然后有两种操作:插入.查询 插入时,如果这个值(string)之前出现过, ...

  7. 2019牛客暑期多校训练营(第九场) D Knapsack Cryptosystem

    题目 题意: 给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0 例如:3  4 2 3 4 输出:0 0 1 题解: 认真想一 ...

  8. 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)

    layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...

  9. 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)

    题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才 ...

随机推荐

  1. poj 3862 && LA 4589 Asteroids (三维凸包+多面体重心)

    3862 -- Asteroids ACM-ICPC Live Archive 用给出的点求出凸包的重心,并求出重心到多边形表面的最近距离. 代码如下: #include <cstdio> ...

  2. js 数组的拼接

    数组的拼接 var a = [1,2,3,4,5,6]; var b=["foo","bar", "fun"]; 最终的结果是: [ 1,2 ...

  3. [转]Android Studio实现代码混淆

     1,在build.grandle添加,其中规则写在proguard-rules.pro中,也可以自定义一个文件,将其代替,比如eclipse常用的 proguard-project.txt: bui ...

  4. 第三次脱发——Scurm学(ctrl)习(C)心得

    Scrum 学习心得: 首先,敏捷并不是一门具体的技术,而是一种理念或者说是一种思想.它可以指导我们更加高效的开发. 其次,敏捷开发都具有以下共同的特征: 迭代式开发 增量交付 开发团队和用户反馈推动 ...

  5. Windows 10 Shared folder - 5168: Spn check for SMB/SMB2 fails.

    在搭建 Win10 Shared Folder 时,运行一段时间后就报 Access denied. 导致 Shared Folder 访问不了. 查了下 Event Viewer -> Win ...

  6. springboot2动态数据源的绑定

    由于springboot2更新了绑定参数的api,部分springboot1用于绑定的工具类如RelaxedPropertyResolver已经无法在新版本中使用.本文实现参考了https://blo ...

  7. js 页面分享

    首先说分享到QQ空间的通用代码:<a href="javascript:void(0);" onclick="window.open('http://sns.qzo ...

  8. 使用Fiddler抓取微信饿了么小程序数据

    使用Fiddler抓取微信饿了么小程序数据 准备 一部装载Android 7.0以下的手机:此处使用华为荣耀5x 微信小程序7.0以下版本:此处为6.6.7.此处可通过豌豆荚应用下载. 安装好的Fid ...

  9. Vue的路由Router之导航钩子和元数据及匹配

    一.文件结构 二.vue.js 打开此链接 https://cdn.bootcss.com/vue/2.6.10/vue.js 复制粘贴页面的所有内容 三.vue-router.js 打开此链接  h ...

  10. P1077 子串乘积正负分类

    题目描述 给你一个序列包含 \(n\) 个元素的序列 \(a_1, a_2, \dots , a_n\) (每个元素 \(a_i \ne 0\)). 你需要计算如下两个值: 有多少对数 \((l, r ...