补题*总结题21/9/14
B - Unexpressed
G - A ^ B ^ C AtCoder - arc113_b (找规律)
题意:
给定三个数A,B,C,求出 a ^b ^c的个位上的数。
思路
-
只需求解个位上数,所以A的个位以上的数对结果无影响,所以我们对A取余。
-
找规律,我们发现0-9中每个数的n次方的个位上的数是具有规律性的,结果如下:
-
利用快速幂计算,对a所在周期取余的结果
-
在记录a的n次幂的个位的数组中输出结果。
代码
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define INF 0x7fffffff #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) int abc[10][5]; ll pm(ll b,ll c,ll mod) { ll res = 1; while(c) { if(c & 1) { (res *= b)%= mod; } c >>= 1; (b*=b)%= mod; } return res; } int main() { IOS; int a,b,c; abc[2][0] = 6;abc[2][1] = 2;abc[2][2] = 4;abc[2][3] = 8; abc[3][0] = 1;abc[3][1] = 3;abc[3][2] = 9;abc[3][3] = 7; abc[4][0] = 6;abc[4][1] = 4; abc[7][0] = 1;abc[7][1] = 7;abc[7][2] = 9;abc[7][3] = 3; abc[8][0] = 6;abc[8][1] = 8;abc[8][2] = 4;abc[8][3] = 2; abc[9][0] = 1;abc[9][1] = 9; cin >>a>>b>>c; a=a%10; if(a ==0||a==1||a ==5||a ==6) { cout<<a<<endl; } else { if(a ==4 ||a==9) { ll bc=pm(b,c,2);//两个数循环 cout<<abc[a][bc]<<endl; } else { ll bc=pm(b,c,4);//四个数循环 cout<<abc[a][bc]<<endl; } } system("pause"); return 0; }
H - String Invasion AtCoder - arc113_c
题意:
给定字符串s
在S中选择三个连续的字符,
使得 s i = s i + 1 ≠ s i + 2 ,将 s i + 2 替换为 s i 。
求最多替换的次数。
思路:
- 从后往前遍历字符串,记录各字符的出现次数。
- 当到符合题意位置q时,
-
- 让结果加上s[q]后面字符串的长度,
-
- 再减去s[q]在后面的字符串中的出现次数(相同的字符不用修改)。
- 因为后面的字符串已经被改动,
-
- 所以要重置记录字符出现次数的数组。
-
- 并且将s[q] 的出现次数改为:后面字符串的长度。
- 循环进行上述过程,直到字符串全都遍历。
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long int cnt[30]; int main() { memset(cnt,0,sizeof cnt); string s; cin>>s; int len = s.length(); ll ans=0; cnt[s[len-1]-'a']++; cnt[s[len-2]-'a']++; for(int i = len-3;i >= 0;i--) { if(s[i]==s[i+1]&&s[i+1]!=s[i+2]) { ans+=len-(i+1)-cnt[s[i]-'a' ]; memset(cnt,0,sizeof cnt); cnt[s[i]-'a'] = len-(i+1); } cnt[s[i]-'a']++; } cout<<ans<<endl; return 0; }
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/15293707.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步