A - Consecutive Sum Riddle
题意
给t,t个样例。给一个n,找出l,r,(l
简单得找规律,如果n=0,输出-1 1,如果n为奇数,n/2+1+n/2=n,输出n/2 n/2+1,如果n为偶数,-n-1 n.
#includeusing namespace std; int main() { int t; cin>>t; while(t--) { long long n; cin>>n; if(n==0) cout<<-1<<" "<<1< B - Special Numbers
题意
有t个样例,n,k
找第k大的数,这个数有n的不同幂次组成,如17为4^0 + 42.要求对109+7求余。
题解
将k化作二进制,第i位为0或1,如果为1,则为n^i.将所有为1的加起来求余。#includeusing namespace std; int mod=1e9+7; int main() { int t; cin>>t; while(t--) { long long n,k,s=0,p=1; cin>>n>>k; for(int i=0;i<32;++i) { if(k&(1< C - Make Them Equal
题意
给一个字符序列,和一个字母c,要求用最少的操作次数将字符序列全换成c,操作为选一个x,对于i,如果i不能被x整除,将i用c替换。
题解
不能被x整除的就都可以替换,那么可以找i的倍数都是c的i,如果找到x=i,其余的都可以替换为c,操作数为1,有一种特殊情况,就是一开始就都是c,就不用操作为0,如果找不到就操作两次,x=n,x=n-1,没有数字可以被n或n-1整除除了它本身。#include#include #include using namespace std; int main() { int t; cin>>t; while(t--) { int n,x; char c,a[300005]; cin>>n; cin>>c; scanf("%s",a+1); bool f=true,s=true,d=true; for(int i=1;i<=n;++i) { if(a[i]!=c) { f=false; break; } } if(f) cout<<0<



