AtCoder Regular Contest 113
A(暴力)
题目:
给出\(K\),求出满足\(A\times B\times C\le K\)的\((A,B,C)\)对数
解析:
将C移动到等式右边,得到\(A\times B\le\frac{K}{C}\),对于\(t=\lfloor\frac{K}{C}\rfloor\),统计\(t\)向下整除\(1\sim t\)的和即为结果
#include<bits/stdc++.h>
using namespace std;
/*===========================================*/
int main() {
int k;
LL result = 0;
scanf("%d", &k);
for (int i = 1; i <= k; ++i) {
int end = k / i;
for (int j = 1; j <= end; ++j)
result += k / i / j;
}
printf("%lld", result);
}
B(思维)
题目:
求出\(A^{B^C}\)的个位数字
解析:
不难得到以下循环
- 1 1 1 1 1 ...(1)
- 2 4 8 6 2 ...(4)
- 3 9 7 1 3 ...(4)
- 4 6 4 6 4 ...(2)
- 5 5 5 5 5 ...(1)
- 6 6 6 6 6 ...(1)
- 7 9 3 1 7 ...(4)
- 8 4 2 6 8 ...(4)
- 9 1 9 1 9 ...(2)
- 0 0 0 0 0 ...(1)
- 对于循环长度为1,则直接输出本身
- 循环长度为2,则考虑\(B\)奇偶性(奇数的幂还是奇数,偶数的幂还是偶数)
- 循环长度为4分\(B\)的奇偶讨论
- 如果\(B\)为奇数且模4为1,则他的幂模4还是1,否则模值在3 1循环
- 如果为偶数则一定含有2,如果能被4整除则幂数模4一定是0,否则看2(因子)的出现次数,即幂数是否大于1,比1大模值为0,比一小模值1
#include<bits/stdc++.h>
using namespace std;
/*===========================================*/
map<int, map<int, int>> m;
int main() {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
m[4][0] = 4, m[4][1] = 6;
m[9][0] = 9, m[9][1] = 1;
m[2][0] = 2, m[2][1] = 4, m[2][2] = 8, m[2][3] = 6;
m[3][0] = 3, m[3][1] = 9, m[3][2] = 7, m[3][3] = 1;
m[8][0] = 8, m[8][1] = 4, m[8][2] = 2, m[8][3] = 6;
m[7][0] = 7, m[7][1] = 9, m[7][2] = 3, m[7][3] = 1;
a %= 10;
if (a == 0 || a == 1 || a == 5 || a == 6)
printf("%d", a);
else if (a == 4 || a == 9)
printf("%d", m[a][b % 2 == 0]);
else {
if (b & 1) {
if (b % 4 == 1)
printf("%d", m[a][0]);
else {
if (c & 1)
printf("%d", m[a][2]);
else
printf("%d", m[a][0]);
}
}
else {
if (b % 4 == 0)
printf("%d", m[a][3]);
else {
if (c >= 2)
printf("%d", m[a][3]);
else
printf("%d", m[a][1]);
}
}
}
}
C(贪心)
题目:
给出一个字符串,以及操作:如果\(s_i=s_{i+1}\ne s_{i+2}\),则将\(s_{i+2}\)替换成\(s_i\),询问最多操作次数
解析:
那如果又两个连续的字符\(c\),则后序字符肯定能都变成\(c\),那么可以考虑从后向前进行替换,这样可以保证最大次数
如此则需要从前向后统计第一次出现的某字符\(c\)与下一个和他不一样的连续字符\(c'\)之间存在多少个\(c\)(这些字符不可以被操作需要从答案中减去),后序字符都可以被替换,因为操作时从后向前,后序字符均会被替换成\(c'\)
#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
/*===========================================*/
const int maxn = 2e5 + 5;
char str[maxn];
int main() {
scanf("%s", str);
int len = strlen(str);
char last = 1;
int lpos = -1;
LL ret = 0;
for (int i = 0; i <= len; ++i) {
if (str[i] == str[i + 1] && str[i] != last)
{
if (~lpos)
ret += 1LL * len - lpos;
lpos = i;
last = str[i];
}
if (str[i] == last)
--ret;
}
printf("%lld", ret + 1);
}
D(排列组合+快速幂)
题目:
给出\(n,m,k\),规定\(A_i\)为第\(i\)行最小的数字,\(B_i\)为第\(i\)行最大的数字,则有多少种序列的可能性(答案取模998244353)
解析:
- 要保证\(A\)中的最大值一定得小于等于\(B\)中最小值,因为假设A中最大值对应位置为\((i,j)\),则在第\(j\)列的最大值要大于等于\(i\)不可能小于$i
- 所以可以枚举\(i\),即\(pow(i,n)\times pow(k+1-i,m)\),但是这样的情况下对于左边(或者右边)可能出现包含的情况,所以一定要保证\(i\)在序列中至少出现1次(或者保证\(j\))
\]
注意:
考虑\(n==1||m==1\)的特殊情况
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int mod = 998244353;
LL pw(LL n, int x) {
LL ret = 1;
LL t = n;
while (x) {
if (x & 1) ret = ret * t % mod;
t = t * t % mod;
x >>= 1;
}
return ret;
}
int main() {
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
if (n == 1)
printf("%lld", pw(k, m));
else if (m == 1)
printf("%lld", pw(k, n));
else {
LL ret = 0;
for (int i = 1; i <= k; ++i)
ret = ((pw(i, n) - pw(i - 1, n) + mod) % mod * pw(k + 1 - i, m) % mod + ret) % mod;
printf("%lld", ret);
}
}
AtCoder Regular Contest 113的更多相关文章
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
- AtCoder Regular Contest 094
AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...
- AtCoder Regular Contest 095
AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
- AtCoder Regular Contest 096
AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...
- AtCoder Regular Contest 097
AtCoder Regular Contest 097 C - K-th Substring 题意: 求一个长度小于等于5000的字符串的第K小子串,相同子串算一个. K<=5. 分析: 一眼看 ...
随机推荐
- oracle 常用语法()
一ORACLE的启动和关闭 1在单机环境下 2在双机环境下 Oracle数据库有哪几种启动方式 1startup nomount 2startup mount dbname 3startup open ...
- ubuntu14.04 ssh允许root用户远程登录
vi /etc/ssh/sshd_config #注释掉 #PermitRootLogin without-password # Authentication: LoginGraceTime 120 ...
- BT宝塔FTP连接不上用不了的解决办法,BT宝塔FTP轻松几步设置即可连接成功
BT宝塔这款linux服务器管理面板,相信现在很多站长都有使用,操作简便,傻瓜化,而且功能全面,什么301设置,SSL证书申请,网站源码一键安装等等,反正就是一句话,BT宝塔非常的好用,但是偶尔也会遇 ...
- MySQL特殊字符的转义处理
出现问题以及问题分析 这条语句会把user_name不为空的所有记录查询出来 select * from user where user_name like concat('%','_','%') 分 ...
- python自动化之使用allure生成测试报告
Allure测试报告框架帮助你轻松实现"高大上"报告展示.本文通过示例演示如何从0到1集成Allure测试框架.重点展示了如何将Allure集成到已有的自动化测试工程中.以及如何实 ...
- UDP实现多人聊天
发送端 package com.zy.exercise; import java.net.DatagramPacket; import java.net.DatagramSocket; import ...
- Educational Codeforces Round 87 (Rated for Div. 2) D树状数组加二分删除的值
Sample Input 5 4 1 2 3 4 5 -5 -1 -3 -1 Sample Output 3 思路,首先发现a[i]的值的范围是在1~n之间,每次插入我们可以直接把cnt[a[i]]+ ...
- 【noi 2.6_9284】盒子与小球之二(DP)
题意:有N个有差别的盒子和分别为A个和B个的红球和蓝球,盒子内可空,问方案数. 解法:我自己打的直接用了求组合C的公式,把红球和蓝球分开看.对于红球,在N个盒子可放任意个数,便相当于除了A个红球还有N ...
- Educational Codeforces Round 9 C. The Smallest String Concatenation(字符串排序)
You're given a list of n strings a1, a2, ..., an. You'd like to concatenate them together in some or ...
- Codeforces Round #667 (Div. 3) D. Decrease the Sum of Digits (贪心)
题意:给你一个正整数\(n\),每次可以对\(n\)加一,问最少操作多少次是的\(n\)的所有位数之和不大于\(s\). 题解:\(n\)的某个位置上的数进位,意味这后面的位置都可以被更新为\(0\) ...