传送门:https://atcoder.jp/contests/arc113
A
直接暴力。
#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#define SET0(a) memset(a,0,sizeof(a))
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define DWN(i,a,b) for(int i=(a);i>=(b);i--)
#define INF 0x3f3f3f3f
typedef long long ll;
int main(){
int k; cin>>k;
ll cnt=0;
FOR(i,1,k){
FOR(j,1,k){
if(i*j>k) break;
FOR(u,1,k){
if(i*j*u<=k) cnt++;
else break;
}
}
}
cout<<cnt<<endl;
return 0;
}
B
一道扩展欧拉定理的裸题。
#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#define SET0(a) memset(a,0,sizeof(a))
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define DWN(i,a,b) for(int i=(a);i>=(b);i--)
#define INF 0x3f3f3f3f
typedef long long ll;
ll fpow(ll x,ll p,ll mod){
ll res=1;
for(;p;p>>=1,x=x*x%mod)
if(p&1) res=res*x%mod;
return res%mod;
}
int main(){
ll a,b,c; cin>>a>>b>>c;
if(b==1 || (b==2 && c==1) || (b==3 && c==1)){
cout<<fpow(a,b,10)<<endl;
return 0;
}
ll p=fpow(b,c,4)+4;
cout<<fpow(a,p,10)<<endl;
return 0;
}
C
模拟+双指针
#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#define SET0(a) memset(a,0,sizeof(a))
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define DWN(i,a,b) for(int i=(a);i>=(b);i--)
#define INF 0x3f3f3f3f
typedef long long ll;
const int N=2e5+5;
char ch[N];
int dic[27];
int main(){
cin>>ch+1;
int len=strlen(ch+1);
ch[len+1]='#';
int s,t; s=t=len;
ll cnt=0;
int tmp=len+1;
while(t){
while(ch[t-1]!=ch[s] && t) {
t--;
dic[ch[s]-'a']++;
s=t;
}
while(ch[t-1]==ch[s] && t) t--;
if(s!=t) {
cnt+=tmp-1-s;
cnt-=dic[ch[s]-'a'];
if(ch[s]!=ch[tmp]) cnt+=len-tmp+1;
memset(dic,0,sizeof dic);
}
tmp=t;
if(t) t--,s=t;
}
cout<<cnt<<endl;
return 0;
}