A 国际旅行Ⅰ
D A*BBBB
F 水灵灵的小学弟
H 狼狼的备忘录
I 重生之zbk要拿回属于他的一切
J 这是签到
##A 国际旅行Ⅰ
链接:https://ac.nowcoder.com/acm/contest/87255/A
来源:牛客网
题目描述
很久很久以前,有 n n n 个国家,第 i i i 个国家有 a i a_{i} ai 个城市,国家之间一共修建了 m m m 条双向道路,保证各个国家之间可以相互到达,正在旅行的小龙向你提出了 q q q 个问题,问你从第一个国家能到达的城市数量第 k k k 少的国家 有多少个城市,请你帮他找到答案。
输入描述:
第一行给定三个整数 n , m , q n,m,q n,m,q 分别表示国家数量,道路数量以及询问的个数。
第二行输入 n n n 个正整数第 i i i 个数 a i a_{i} ai 表示第 i i i 个国家城市的数量。
接下来 m m m 行,每行两个正整数 u , v u,v u,v,表示 u u u 国和 v v v 国之间有一条双向道路。
接下来 q q q 行每行1个整数 k k k ,表示小龙他的问题。
保证
1 ≤ n ≤ 1000 1\leq n \leq 1000 1≤n≤1000
n − 1 ≤ m ≤ n ∗ ( n − 1 ) / 2 n-1 \leq m \leq n * (n - 1) / 2 n−1≤m≤n∗(n−1)/2
1 ≤ a i ≤ 100000 1 \leq a_{i} \leq 100000 1≤ai≤100000
1 ≤ u , v ≤ n 1\leq u,v\leq n 1≤u,v≤n
1 ≤ k ≤ n 1 \leq k \leq n 1≤k≤n,
输出描述:
输出共 q q q行,每行输出一个整数表示第 i i i个问题的答案。
示例1
输入
5 5 3
10 19 5 7 12
1 2
2 3
3 4
4 5
5 1
1
4
5
输出
5 12 19
###思路:第二行输入的数组排序,从小到大对应第k个;
###代码
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int n,m,q;cin>>n>>m>>q;int a[1001];for(int i=0;i<n;i++)cin>>a[i];int u,v;while(m--)cin>>u>>v;int k;while(q--){cin>>k;sort(a,a+n);cout<<a[k-1]<<endl;//在这从零开始所以-1;}return 0;
}
##D A*BBBB
链接:https://ac.nowcoder.com/acm/contest/87255/D
来源:牛客网
题目描述
集训队的 l o n g l o n g longlong longlong同学刚学完c语言基础后,非常高兴的开始做题,但是突然有一题难住了 l o n g l o n g longlong longlong同学。题面如下:
t t t组输入,每组输入给两个整数 a a a和 b b b,输出 a ∗ b a*b a∗b。但是 a , b a,b a,b非常大, 0 < = a , b < = 1 0 1000000 0<=a,b<=10^{1000000} 0<=a,b<=101000000。其中 b b b的每一位都相同,且 a , b a,b a,b都不含前导0。
l o n g l o n g longlong longlong同学写不出题太痛苦了,于是请求你帮帮他。
输入描述:
原始内容
Copy
翻译
第1行输入一个 t t t表示 t t t组输入 ( 1 < = t < = 10 ) (1<=t<=10) (1<=t<=10)
第2到 2 ∗ t + 1 2*t+1 2∗t+1行,每组给出两行,分别是 a , b a,b a,b。 1 ≤ ∣ a ∣ , ∣ b ∣ ≤ 1 e 6 1\leq|a|,|b|\leq1e6 1≤∣a∣,∣b∣≤1e6.
∣ a ∣ |a| ∣a∣表示 a a a的长度
输出描述:
输出t行,每行一个整数,表示 a ∗ b a*b a∗b的答案
示例1
输入
2
114514
22
1919810
33
输出
2519308
63353730
备注:
因为整数太大不能直接用py的乘法哦,要仔细思考一下哦。
###先上错误代码,比赛时没过,后来看到只能国83%;
#include<iostream>
#include<string>
#include<algorithm>
const int N=1e6+5;
using namespace std;
int main()
{int n;cin>>n;while(n--){int a[N],b[N],c[N]={0};string s1,s2;cin>>s1>>s2;int l1=s1.size(),l2=s2.size();for(int i=0;i<l1;i++)a[l1-i-1]=s1[i]-'0';for(int i=0;i<l2;i++)b[l2-i-1]=s2[i]-'0';for(int i=0;i<l1;i++)for(int j=0;j<l2;j++)c[i+j]+=a[i]*b[j];int l=l1+l2;for(int i=0;i<l;i++)if(c[i]>9){c[i+1]+=c[i]/10;c[i]%=10;} while(c[l]>9){c[l+1]+=c[l]/10;c[l]%=10;l++;}while(c[l-1]==0&&l>1)l--;for(int i=l-1;i>=0;i--)cout<<c[i];cout<<'\n';}return 0;
}
##F 水灵灵的小学弟
链接:https://ac.nowcoder.com/acm/contest/87255/F
来源:牛客网
题目描述
校草杜宏言和他亲爱的小学弟段辉映在玩一个取石子益智小游戏。
游戏规则如下,有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子(取走的数量都是整数)。
游戏规定,每次有两种不同的取法:
∙ \quad \bullet ∙ 可以在任意的一堆中取走任意多的石子;
∙ \quad \bullet ∙ 可以在两堆中同时取走相同数量的石子。
最后把石子全部取完者为胜者。
现在给出初始的两堆石子的数目,如果轮到杜宏言先取,假设双方都采取最好的策略,问最后谁是胜者。
输入描述:
第一行输入一个 T T T,表示有 T T T 组数据。 ( 1 ≤ T ≤ 10000 ) (1 \leq T \leq 10000) (1≤T≤10000)。
接下来 T T T 行,其中每一行包含两个整数 a a a 和 b b b,表示两堆石子的数目, ( 1 ≤ a , b ≤ 1 0 9 ) (1 \leq a,b \leq 10^9) (1≤a,b≤109)。
输出描述:
输出对应也有 T T T 行,输出赢者名字每个字首字母,要求大写。例如“原神”,输出“YS”(不带引号)。
示例1
输入
1
2 1
输出
DHY
说明
可以发现,样例后手必胜。
###思路:对于这道题而言,不管谁赢输出一样;
###直接代码
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
signed main()
{int t;cin>>t;while(t--)cout<<"DHY"<<'\n';return 0;
}
##H 狼狼的备忘录
链接:https://ac.nowcoder.com/acm/contest/87255/H
来源:牛客网
题目描述
圈圈:代打王者, 1 r 1r 1r 一局, 3 r 3r 3r 两局, 5 r 5r 5r 三局,不保证胜率,诚信经营
y q yq yq :圈,我赚的第一块是小寒冰的~
静静:鸢还不给我抽到张邈!!!
狼狼:瓦,启…
玉玉:长相思长相思长相思
以上是广告招租位,和本题无关。
由于狼狼是一个喜欢看星座的小女孩,为此她写了几本备忘录来记录集训队成员的星座信息。(桃白白说过,经常看星座相关的信息可以提高 c o d e f o e c e s codefoeces codefoeces 分数。多读书多看报,少吃零食多 c o d e f o r c e s !!! codeforces!!! codeforces!!! )
狼狼决定整理这几本备忘录里有关集训队成员的星座信息,每本备忘录都记录着一个成员的一条或多条星座信息。包含 n n n 本备忘录:每本备忘录都由一个名字 i d id id 开头代表某个集训队成员名字,然后是一个记录的条目数代表狼狼在该备忘录中记录该成员的信息条数 o p op op ,最后是 o p op op 条星座信息本身。同一本备忘录中可能记录了多个相同的星座信息,不同的备忘录可能记录同一个人的多条信息。
狼狼认为整理这些备忘录信息应该遵循一下规则:
A:同一个成员的星座信息 x x x 是星座信息 y y y 的后缀,那么星座信息 x x x 会没有星座信息 y y y 完整,从而应该只保留星座信息 y y y ,删除星座信息 x x x 。
B:同一个成员的星座信息可能以相同格式出现多次,那么只保留该信息一次。
注意:有可能两个不同的成员有着相同的星座信息,这是合法的。
现在狼狼现在要跟圈圈静静 y q yq yq 玉玉前往瓦的训练场,请你按照规则 A A A ,规则 B B B 帮助狼狼整理她的备忘录,并且将这些备忘录信息按照字典序打印出来。
输入描述:
包含整数 n ( 1 < = n < = 20 ) n(1<= n <= 20) n(1<=n<=20) - 狼狼的备忘录本数
接下来的 n n n 行是按照语句中的格式对成员的星座信息进行描述。
成员名字是长度不超过10的非空字符串,他们仅由小写英文字母组成。条目数是一个不少于1,不超过10的整数。星座信息是长度不超过10的非空字符串,仅由数字组成。
输出描述:
打印有关狼狼备忘录中集训队成员们的星座信息。
第一行输出 m m m 表示在狼狼备忘录中找到的成员的数量。
以下 m m m 行必须包含以下格式:“成员名字 条目数信息 信息”,每条记录必须包含当前成员的所有星座信息。
输出时成员名字字典序小的先输出,每个成员的星座信息中字典序小的先输出,星座信息中前导零也要输出。
示例1
输入
3
karl 2 612 12
petr 1 12
katya 1 612
输出3 karl 1 612 katya 1 612 petr 1 123
karl 1 612
katya 1 612
petr 1 12
示例2
输入
4
ivan 3 123 123 456
ivan 2 456 456
ivan 8 789 3 23 6 56 9 89 2
dasha 2 23 789
输出
2
dasha 2 23 789
ivan 4 123 2 456 789```
示例3
输入
2
yq 1 777777
icealsoheat 1 555
输出
2
icealsoheat 1 555
yq 1 777777
示例4
输入
10
zifei 1 8
zilatan 1 9
consuui 1 3
zonehawkr 1 10
wananan 1 5
foureyebird 1 4
xpp 1 7
wulong 1 6
andso 1 1
btqq 1 2
输出
10
andso 1 1
btqq 1 2
consuui 1 3
foureyebird 1 4
wananan 1 5
wulong 1 6
xpp 1 7
zifei 1 8
zilatan 1 9
zonehawkr 1 10
##思路:比赛的时候想的后缀不是很对,导致题目没看懂
##I 重生之zbk要拿回属于他的一切
链接:https://ac.nowcoder.com/acm/contest/87255/I
来源:牛客网
题目描述
曾几何时,光芒万丈,一人之下,万人之上。可叹今日,zbk倒在血泊之中,兄弟联手他的未婚妻背刺了他,他的好兄弟小川夺走了属于他的一切,包括他的未婚妻。他如此爱他的未婚妻,为救他身负重伤,才给了小川可乘之机,但现在回想起来,自己也不过是一只爱情的添狗罢了。
濒死之际,恍惚中,zbk听到了一声呢喃,“如果我再给你一次机会,你又会做出怎样的抉择呢?” “你。。。你究竟是何方神圣?” “只是一直普通平凡恰恰好路过的禹longlong罢了。”
就这样在禹longlong的帮助下,zbk成功的回到了一年之前。这一世,zbk要拿回属于他的一切。但在此之前,他需要在人群中分辨出他复仇的对象是否在其中,因为zbk是个死舔狗,不忍心对未婚妻下手,因此他只需要找到小川就好了。对此,他发动了他的大编程术。
给定一个长度为n的字符串S,S全由小写字母组成,当这个字符串中存在子串“chuan”(不加引号)时,说明小川就在其中,小川可能有很多个,请输出在该字符串 S S S中小川的数量。
输入描述:
1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1≤n≤105
然后输入一个长度为n且全为小写字母组成的字符串s。
输出描述:
输出一个非负整数,表示给定字符串中的子串chuan的数量。
示例1
输入
5
chuan
输出
1
示例2
输入
6
chuaan
输出
0
###思路:严格查找"chuan"就行,必须字母紧挨着顺序和"chuan"一样;
###代码
#include <iostream>
#include <string>
using namespace std;
int main()
{int n;cin>>n;string s;cin >> s;int sum = 0;int f=0;for(int i = 0; i < n; i++){if(s[i]=='c'&&s[i+1]=='h')f=1;if(s[i]=='h'&&f==1&&s[i+1]=='u'&&s[i-1]=='c')f=2;if(s[i]=='u'&&f==2&&s[i+1]=='a'&&s[i-1]=='h')f=3;if(s[i]=='a'&&f==3&&s[i+1]=='n'&&s[i-1]=='u')f=4;if(s[i]=='n'&&f==4&&s[i-1]=='a')f=5;if(f==5)sum++;}cout << sum << endl;return 0;
}
##J 这是签到
链接:https://ac.nowcoder.com/acm/contest/87255/J
来源:牛客网
题目描述
毛毛看到Sakura出的计算题之后发现太难了就稍微改了一下。然后转头就让冰冰来做这道题。
题目要求冰冰得到一个 n × m n \times m n×m 的行列式。有些行列式可能无法直接计算,但可以做一个操作:在行或列补充全为 0 0 0 的一行或一列,使其变为可计算的。不过最多只能扩充成 m a x ( n , m ) × m a x ( n , m ) max(n,m) \times max(n,m) max(n,m)×max(n,m) 的行列式。要想拿满分,需计算所有可计算行列式中从 ( 1 , 1 ) (1,1) (1,1) 位置构成的最小值
输入描述:
第一行给出两个整数n,m。
接下来的n行,每行给出m个整数。
1 ≤ n , m ≤ 5 , ∣ a i j ∣ ≤ 10 1\le n,m\le5,|a_{ij}|\le10 1≤n,m≤5,∣aij∣≤10
输出描述:
原始内容
Copy
翻译
输出一个整数,所有构成可计算行列式的最小值。
示例1
输入
3 4
1 2 3 1
4 5 6 1
7 8 9 1-3说明
从(1,1)位置开始:
可以构成的 1 × 1 1 \times 1 1×1行列式: [ 1 ] \begin{bmatrix} 1 \end{bmatrix} [1] = 1 =1 =1
可以构成的 2 × 2 2 \times 2 2×2 行列式: [ 1 2 4 5 ] \begin{bmatrix} 1 & 2 \\ 4 & 5 \end{bmatrix} [1425] = − 3 =-3 =−3
可以构成的 3 × 3 3 \times 3 3×3 行列式: [ 1 2 3 4 5 6 7 8 9 ] \begin{bmatrix} 1 & 2 &3 \\ 4 & 5 &6 \\7&8&9 \end{bmatrix} 147258369 = 0 =0 =0
因为n=3,m=4,所以可以按照题目,在第四行用0补全。
构成的 4 × 4 4 \times 4 4×4 行列式: [ 1 2 3 1 4 5 6 1 7 8 9 1 0 0 0 0 ] \begin{bmatrix} 1 & 2&3&1 \\ 4 & 5&6&1 \\7&8&9&1\\0&0&0&0 \end{bmatrix} 1470258036901110 = 0 = 0 =0
故所有可计算的行列式的最小值为 -3 。
简单行列式计算规则:
1.行列式只有$n\times n$的可以计算2.$n \times n$行列式可以用以下方法计算得出: 其中$N$$\left( j_{1}j_{2}...j_{n} \right)$表示为排列$\left( j_{1}j_{2}...j_{n} \right)$的逆序对的个数
2 × 2 2 \times 2 2×2行列式:
对于 2 × 2 2 \times 2 2×2 行列式 ∣ a b c d ∣ \begin{vmatrix} a & b \\ c & d \end{vmatrix} acbd ,用对角线计算方法:
左上至右下对角线乘积相加: a × d a \times d a×d;
右上至左下对角线乘积相减: b × c b \times c b×c;
相减后即为行列式结果: ( a × d ) − ( b × c ) (a \times d) - (b \times c) (a×d)−(b×c)。
3 × 3 3 \times 3 3×3 行列式:
对于 3 × 3 3 \times 3 3×3 行列式 ∣ a b c d e f g h i ∣ \begin{vmatrix} a & b & c \\ d & e & f \\ g & h & i \end{vmatrix} adgbehcfi ,对角线法则展开:
沿主对角线(左上至右下)乘积求和: a × e × i + b × f × g + c × d × h a \times e \times i + b \times f \times g + c \times d \times h a×e×i+b×f×g+c×d×h;
沿副对角线(右上至左下)乘积求差: c × e × g + a × f × h + b × d × i c \times e \times g + a \times f \times h + b \times d \times i c×e×g+a×f×h+b×d×i;
对主对角线求和减去副对角线求差,即为最终结果。
###思路:因为最大5*5,所以直接所有值求一下就行
###代码
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
signed main() {int n, m;cin >> n >> m;int a[5][5] = {0}; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) cin >> a[i][j];int maxx = a[0][0];if (m > 1 && n > 1) { int sum2 = a[0][0] * a[1][1] - a[1][0] * a[0][1];maxx = min(maxx, sum2);}if (m > 2 && n > 2) { int sum3 = a[0][0] * a[1][1] * a[2][2]+ a[1][0] * a[2][1] * a[0][2]+ a[2][0] * a[0][1] * a[1][2]- a[2][0] * a[1][1] * a[0][2]- a[1][0] * a[0][1] * a[2][2]- a[0][0] * a[2][1] * a[1][2];maxx = min(maxx, sum3);}if (m > 3 && n > 3) { int sum4 = a[0][0] * a[1][1] * a[2][2] * a[3][3]+ a[1][0] * a[2][1] * a[3][2] * a[0][3]+ a[2][0] * a[3][1] * a[0][2] * a[1][3]+ a[3][0] * a[0][1] * a[1][2] * a[2][3]- a[3][0] * a[2][1] * a[1][2] * a[0][3]- a[2][0] * a[1][1] * a[0][2] * a[3][3]- a[1][0] * a[0][1] * a[3][2] * a[2][3]- a[0][0] * a[3][1] * a[2][2] * a[1][3];maxx = min(maxx, sum4);}if (m > 4 && n > 4) {int sum5 = a[0][0] * a[1][1] * a[2][2] * a[3][3] * a[4][4]+ a[1][0] * a[2][1] * a[3][2] * a[4][3] * a[0][4]+ a[2][0] * a[3][1] * a[4][2] * a[0][3] * a[1][4]+ a[3][0] * a[4][1] * a[0][2] * a[1][3] * a[2][4]+ a[4][0] * a[0][1] * a[1][2] * a[2][3] * a[3][4]- a[4][0] * a[3][1] * a[2][2] * a[1][3] * a[0][4]- a[3][0] * a[2][1] * a[1][2] * a[0][3] * a[4][4]- a[2][0] * a[1][1] * a[0][2] * a[4][3] * a[3][4]- a[1][0] * a[0][1] * a[4][2] * a[3][3] * a[2][4]- a[0][0] * a[4][1] * a[3][2] * a[2][3] * a[1][4];maxx = min(maxx, sum5);}if(n!=m&&maxx>0)//因为n,m不相等的时候,补充零,最小值一定小于等于0maxx=0; cout << maxx << endl;return 0;
}