E
题单
目录
A:
题意:
给出n,令[l,r]区间之和等于n,求 l与r。
思路:
[l,r]=[-n+1,n]
代码:
#include <bits/stdc++.h>
#define bbn 200005
#define maxint 2147483647
#define maxLLint 9223372036854775807
#define mod 1000000007 //1e9+7
const double eps=1e-7;
typedef long long int LL;
using namespace std;
LL t,n;
void work()
{
cin>>t;
while(t--)
{
cin>>n;
cout<<-(n-1)<<' '<<n<<'\n';
}
}
int main()
{
work();
return 0;
}
B:
题意:
给出n,k,求第k大的由n的不同幂数组成的数。
思路:
模拟2进制处理k。
2进制数的第pos位的1代表n^(pos-1)存在。
2进制数的第pos位的0代表n^(pos-1)不存在。
代码:
#include <bits/stdc++.h>
#define bbn 300005
#define maxint 2147483647
#define maxLLint 9223372036854775807
#define mod 1000000007 //1e9+7
const double eps=1e-7;
typedef long long int LL;
using namespace std;
LL t,n,k;
void work()
{
cin>>t;
while(t--)
{
cin>>n>>k;
LL sum=0;
LL p=1;
for(;;)
{
if(k<2)
{
sum+=(k%2)*p;
k/=2;
p*=n;
sum%=mod;
p%=mod;
break;
}
else
{
sum+=(k%2)*p;
k/=2;
p*=n;
sum%=mod;
p%=mod;
}
}
cout<<sum<<'\n';
}
}
int main()
{
work();
return 0;
}
C:
题意:
给出字符串及字符c,字符串中每个不同的字符都得换成c,更换时必须满足下标不能整除xi
输出时让xi这样的数最少。
思路:
先整体判断答案是否为0;
然后判断[n,n/2)的字符串,这个区间的下标数没有整倍数(2倍及以上)在[1,n]上。
代码:
#include <bits/stdc++.h>
#define bbn 300005
#define maxint 2147483647
#define maxLLint 9223372036854775807
#define mod 1000000007 //1e9+7
const double eps=1e-7;
typedef long long int LL;
using namespace std;
int t,n;
char c;
string s;
void work()
{
cin>>t;
while(t--)
{
cin>>n;
cin>>c;
cin>>s;
bool judge=1;
for(int i=0; i<n; i++)
{
if(s[i]!=c)
{
judge=0;
break;
}
}
if(judge==1)
{
cout<<0<<'\n';
}
else
{
int k=0;
for(int i=n; i>n/2; i--)
{
if(s[i-1]==c)
{
k=i;
break;
}
}
if(k==0)
{
cout<<2<<'\n';
cout<<n<<' '<<n-1<<'\n';
}
else
{
cout<<1<<'\n';
cout<<k<<'\n';
}
}
}
}
int main()
{
work();
return 0;
}
E1:
题意:
二叉树染色,总共6个颜色,一个颜色只能与4个颜色相邻。
思路:
用到了高中的组合数知识。
sum=6*f(2)*f(3)*f(4)*f(5)*......f(k)
/*
f(k)=f(k-1)*f(k-1)
f(2)=4^2 f(3)=4^4 f(4)=4^8 f(5)=4^16 ...
*/
代码:
#include <bits/stdc++.h>
#define bbn 300005
#define maxint 2147483647
#define maxLLint 9223372036854775807
#define mod 1000000007 //1e9+7
const double eps=1e-7;
typedef long long int LL;
using namespace std;
LL k,sum,p;
void work()
{
cin>>k;
sum=6;
p=16;
for(int i=1; i<=k-1; i++)
{
sum*=p;
p*=p;
sum%=mod;
p%=mod;
//cout<<sum<<" "<<p<<'\n';
}
cout<<sum<<'\n';
}
int main()
{
work();
return 0;
}