目录
赛时: A,K(我好想说我AK了,可惜我是弱鸡)
K:
很明显,要么三个要么五个
#include<bits/stdc++.h>
#define endl '\n'
#define ll int
#define int int
#define double long double
#define Int __int128
#define pb push_back
#define eb emplace_back
#define MAX_LOG 21
#define ff first
#define ss second
#define M 5005
#define ull unsigned long long
using namespace std;
const int INF=0x3f3f3f3f;
typedef pair<ll,ll> PLL;
typedef pair<int,int>PII;
ll gcd(ll a,ll b)
{
if(b) while((a%=b)&&(b%=a));
return a+b;
}//最大公约数函数
ll spid(ll a,ll b,ll p)
{
ll ans=1;
while(b)
{
if(b&1)ans=ans*a%p;
b>>=1;
a=a*a%p;
}
return ans;
}//快速幂函数
///泡沫在阳光下闪烁,像星辰在寂静得夜空中闪耀
///秋雨
const ll N=2e5+10;
void solve()
{
string s;cin>>s;
ll n=s.size();
s='.'+s;
for(int i=1;i<=n;i++)
{
if(n-i+1>=5&&s[i]=='a'&&s[i+1]=='v'&&s[i+2]=='a'&&s[i+3]=='v'&&s[i+4]=='a')
{
i+=4;
}else if(n-i+1>=3&&s[i]=='a'&&s[i+1]=='v'&&s[i+2]=='a')i+=2;
else
{
cout<<"No\n";
return;
}
}cout<<"Yes\n";
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
cin>>t;
while(t--)
{
solve();
}
}
///在秋天邂逅, 在春天发芽,在夏天壮大,在秋天萧瑟,在冬天萎缩,
///而后,春天再度归来。
A:
暴力枚举gcd即可,刚好过得去,嘻嘻
#include<bits/stdc++.h>
#define endl '\n'
#define ll int
#define int int
#define double long double
#define Int __int128
#define pb push_back
#define eb emplace_back
#define MAX_LOG 21
#define ff first
#define ss second
#define M 5005
#define ull unsigned long long
using namespace std;
const int INF=0x3f3f3f3f;
typedef pair<ll,ll> PLL;
typedef pair<int,int>PII;
ll gcd(ll a,ll b)
{
if(b) while((a%=b)&&(b%=a));
return a+b;
}//最大公约数函数
ll spid(ll a,ll b,ll p)
{
ll ans=1;
while(b)
{
if(b&1)ans=ans*a%p;
b>>=1;
a=a*a%p;
}
return ans;
}//快速幂函数
///泡沫在阳光下闪烁,像星辰在寂静得夜空中闪耀
///秋雨
const ll N=2e5+10;
ll a[N];
void solve()
{
ll n;cin>>n;unordered_set<ll>st;
for(int i=1;i<=n;i++)cin>>a[i],st.insert(a[i]);
if(n==1)
{
cout<<"Haitang\n";
return;
}
for(int i=1e5;i>=1;i--)
{
ll t=0;
for(int j=1;j<=1e5;j++)
{
if(i*j>1e5)break;
if(!st.count(i*j))continue;
if(!t)t=j;
t=gcd(t,j);
}
if(t==1)st.insert(i);
}
if(st.size()-n&1)cout<<"dXqwq\n";
else cout<<"Haitang\n";
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
cin>>t;
while(t--)
{
solve();
}
}
///在秋天邂逅, 在春天发芽,在夏天壮大,在秋天萧瑟,在冬天萎缩,
///而后,春天再度归来。
E:
移项后就变成找到(n-s(m))%m==0的式子,然后去找对应的因数嘛,思路就这么简单,结果发现时间复杂度用我会的筛因子根本过不去,结果赛后发现有个巴拉巴拉算法可以dfs求因子,刚好对应大数的(赛时没搜着),然后思路一点没变,人家过了,我没过,呜呜呜~。这边贴一下暴力算法。
#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define int int
#define double long double
#define Int __int128
#define pb push_back
#define eb emplace_back
#define MAX_LOG 21
#define ff first
#define ss second
#define M 5005
#define ull unsigned long long
using namespace std;
const int INF=0x3f3f3f3f;
typedef pair<ll,ll> PLL;
typedef pair<int,int>PII;
ll gcd(ll a,ll b)
{
if(b) while((a%=b)&&(b%=a));
return a+b;
}//最大公约数函数
ll spid(ll a,ll b,ll p)
{
ll ans=1;
while(b)
{
if(b&1)ans=ans*a%p;
b>>=1;
a=a*a%p;
}
return ans;
}//快速幂函数
///泡沫在阳光下闪烁,像星辰在寂静得夜空中闪耀
///秋雨
const ll N=2e5+10;
ll a[N];
ll sum(ll x)
{
ll ans=0;
while(x)
{
ans+=x%10;
x/=10;
}
return ans;
}
void solve()
{
ll n;
cin>>n;
ll ans=0;
for(int i=1; i<=108; i++)
{
for(int j=1; j*j<=n-i&&j<=108; j++)
{
if((n-i)%j==0)
{
if( (sum(j)==i) && (i!=j) )
{
// cout<<i<<' '<<j<<'\n';
ans++;
}
if(sum((n-i)/j)==i && (j*j!=n-i) && (i!=(n-i)/j) )
{
// cout<<i<<' '<<(n-i)/j<<'\n';
ans++;
}
}
}
}
for(int i=109; i*i<=n; i++)
{
int res=n%i;
if(res<=108)
{
if(sum(i)==res)
{
// cout<<res<<' '<<i<<'\n';
ans++;
}
if(sum((n-res)/i)==res&&(i*i!=(n-res)))
{
// cout<<res<<' '<<(n-res)/i<<'\n';
ans++;
}
}
}
cout<<ans<<'\n';
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
cin>>t;
while(t--)
{
solve();
}
}
///在秋天邂逅, 在春天发芽,在夏天壮大,在秋天萧瑟,在冬天萎缩,
///而后,春天再度归来。
但是肯定有别的解法,我放下面了,(会发现就是加了一些限制,就能跑了呜呜呜)
#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define int long long
#define double long double
#define Int __int128
#define pb push_back
#define eb emplace_back
#define MAX_LOG 21
#define ff first
#define ss second
#define M 5005
#define ull unsigned long long
using namespace std;
const int INF=0x3f3f3f3f;
typedef pair<ll,ll> PLL;
typedef pair<int,int>PII;
ll gcd(ll a,ll b)
{
if(b) while((a%=b)&&(b%=a));
return a+b;
}//最大公约数函数
ll spid(ll a,ll b,ll p)
{
ll ans=1;
while(b)
{
if(b&1)ans=ans*a%p;
b>>=1;
a=a*a%p;
}
return ans;
}//快速幂函数
///泡沫在阳光下闪烁,像星辰在寂静得夜空中闪耀
///秋雨
const ll N=2e5+10;
ll a[N];
ll sum(ll x)
{
ll ans=0;
while(x)
{
ans+=x%10;
x/=10;
}
return ans;
}
void solve()
{
ll n;
cin>>n;
ll ans=0;
for(int i=1; i<=108; i++)
{
for(int j=1; j*j<=n-i&&j<=108; j++)
{
if((n-i)%j==0)
{
if( (sum(j)==i) && (i!=j) )
{
// cout<<i<<' '<<j<<'\n';
ans++;
}
if(sum((n-i)/j)==i && (j*j!=n-i) && (i!=(n-i)/j) )
{
// cout<<i<<' '<<(n-i)/j<<'\n';
ans++;
}
}
}
}
for(int i=109; i*i<=n; i++)
{
int res=n%i;
if(res<=108)
{
if(sum(i)==res)
{
// cout<<res<<' '<<i<<'\n';
ans++;
}
if(sum((n-res)/i)==res&&(i*i!=(n-res)))
{
// cout<<res<<' '<<(n-res)/i<<'\n';
ans++;
}
}
}
cout<<ans<<'\n';
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
cin>>t;
while(t--)
{
solve();
}
}
///在秋天邂逅, 在春天发芽,在夏天壮大,在秋天萧瑟,在冬天萎缩,
///而后,春天再度归来。
如果按照原本的找因子的思路,那么就需要扣板子了,我放下边,dfs求出来的因子放在了ans数组里,如果你发现你尝试把下面这份代码变成你的代码,但是却只过了41%,那么应该是你快速幂没写好,因为数据范围大,1e18可能会暴long long(int64_t)
#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define int long long
#define double long double
#define Int __int128
#define pb push_back
#define eb emplace_back
#define MAX_LOG 21
#define ff first
#define ss second
#define M 5005
#define RI register int
#define CI const int&
#define ull unsigned long long
using namespace std;
const int INF=0x3f3f3f3f;
typedef pair<ll,ll> PLL;
typedef pair<int,int>PII;
ll gcd(ll a,ll b)
{
if(b) while((a%=b)&&(b%=a));
return a+b;
}//最大公约数函数
ll spid(ll a,ll b,ull p)
{
ll ans=1;
while(b)
{
if(b&1)ans=(Int)ans*a%p;
b>>=1;
a=(Int)a*a%p;
}
return ans;
}//快速幂函数
///泡沫在阳光下闪烁,像星辰在寂静得夜空中闪耀
///秋雨
const ll N=2e5+10;
bool check(const ll a,const ull p)
{
ull d=p-1,get=spid(a,d,p);
if(get!=1) return 1;//特判 d=p-1 的情况
while((d&1)^1)
if(d>>=1,(get=spid(a,d,p))==p-1) return 0;//先 d/=2,再计算快速幂
else if(get!=1) return 1;
return 0;
}
const ll test[]= {2,3,5,7,11,13,17,19,23,29,31,37};
bool miller_rabin(const ll p)
{
if(p>40)
{
for(auto i:test)
if(check(i,p)) return 0;
return 1;
}
for(auto i:test)
if(p==i) return 1;
return 0;
}
mt19937 rng((unsigned int) chrono::steady_clock::now().time_since_epoch().count());
///产生随机数
ll pollard_rho(ll x)
{
ll s=0,t=0;
ll c=(ll)(rng())%(x-1)+1;
ll val = 1;
for(int goal=1; ;goal<<=1,s=t,val=1)
{
for (int step=1; step<=goal; step++)
{
t=((Int)(t)*t+c)%x;
val=(Int)(val)*abs(t-s)%x;
if(step%127==0)
{
ll g=gcd(val,x);
if(g>1)
{
return g;
}
}
}
ll g=gcd(val, x);
if(g>1)
{
return g;
}
}
}
unordered_map<ll,ll> getprimes(ll x)
{
unordered_map<ll,ll> p;
function<void(ll)>get=[&](ll x)
{
if(x<2)
{
return;
}
if (miller_rabin(x))
{
p[x]++;
return;
}
ll mx = pollard_rho(x);
get(x/mx);
get(mx);
};
get(x);
return p;
}
vector<ll>getfac(ll x)///获取非凡因子
{
vector<ll>fac;
auto primes =getprimes(x);
vector<PLL> tmp(primes.begin(),primes.end());
ll len=tmp.size();
function<void(ll,ll)>dfs=[&](ll st,ll x)
{
if(st==len)
{
fac.eb(x);
return;
}
ll p = 1;
for(int i=0; i<=tmp[st].ss; i++)
{
if (i != 0)
{
p *= tmp[st].ff;
}
dfs(st+1,x*p);
}
};
dfs(0, 1);
return fac;
}
ll sum(ll x)
{
ll ans=0;
while(x)
{
ans+=x%10;
x/=10;
}return ans;
}
void solve()
{
ll n;
cin >> n;
vector<ll>ans;
for(int i=1; i<=109; i++)
{
if(i>n)
{
break;
}
auto v=getfac(n-i);
for(auto &m :v)
{
if (n%m==sum(m))
{
ans.eb(m);
}
}
}
sort(ans.begin(), ans.end());
ans.erase(unique(ans.begin(), ans.end()), ans.end());///去重
///求出来的因子
cout<<ans.size()<<'\n';
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
cin>>t;
while(t--)
{
solve();
}
}
///在秋天邂逅, 在春天发芽,在夏天壮大,在秋天萧瑟,在冬天萎缩,
///而后,春天再度归来。
J:
发现i,i+n/3 ,i+2*n/3是个非三角序列,i,i+1,i+2是个合法三角序列,那么就可以根据题目去构造这个数组。然后再对数组进行微调即
#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define int long long
#define double long double
#define Int __int128
#define pb push_back
#define eb emplace_back
#define MAX_LOG 21
#define ff first
#define ss second
#define M 5005
#define RI register int
#define CI const int&
#define ull unsigned long long
using namespace std;
const int INF=0x3f3f3f3f;
typedef pair<ll,ll> PLL;
typedef pair<int,int>PII;
ll gcd(ll a,ll b)
{
if(b) while((a%=b)&&(b%=a));
return a+b;
}//最大公约数函数
ll spid(ll a,ll b,ull p)
{
ll ans=1;
while(b)
{
if(b&1)ans=(Int)ans*a%p;
b>>=1;
a=(Int)a*a%p;
}
return ans;
}//快速幂函数
///泡沫在阳光下闪烁,像星辰在寂静得夜空中闪耀
///秋雨
const ll N=2e5+10;
vector<ll> get_vec(ll n)
{
vector<ll>res;
if(n%3)res.eb(n-n%3+1);
ll t=n/3;
for(int i=t; i; i--)
{
res.eb(i);
res.eb(i+t);
res.eb(i+2*t);
}
if(n%3==2)res.eb(n);
return res;
}
void solve()
{
ll n,k;cin>>n>>k;
if(k>=n-2)
{
cout<<-1<<'\n';
return;
}
vector<ll>ans=get_vec(n-k);
for (int i=n-k+1; i<=n; i++) ans.push_back(i);
if ((n-k)%3==1 && k>0) swap(ans[0], ans[n-k]);
bool ret=1;
for(int x:ans)
cout << x << ' ';cout << '\n';
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
cin>>t;
while(t--)
{
solve();
}
}
///在秋天邂逅, 在春天发芽,在夏天壮大,在秋天萧瑟,在冬天萎缩,
///而后,春天再度归来。
可