链接:https://ac.nowcoder.com/acm/contest/6489/A
来源:牛客网
完全平方数的尾巴
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 65536K,其他语言131072K
64bit IO Format: %lld
题目描述
我们把一个能被表示成某个整数的平方的数称为完全平方数。
例如4 = 2 * 24=2∗2,16 = 4 * 416=4∗4,所以44,1616是完全平方数。
现在输入一个整数为xx(0\leq x \leq9990≤x≤999),请聪明的你判断它是不是由某个完全平方数对10001000取模得到的呢。
示例1
输入
复制
24
输出
复制
true
说明
1024 = 32 *32
24 = 1024 mod1000
备注:
1024 = 32 *32
24 = 1024mod 1000
class Solution {
public:
/**
*
* @param x int整型
* @return bool布尔型
*/
bool solve(int x) {
for(int i=1;i<=1000;i++){
if(i*i%1000==x){
return true;
}
}
return false;
}
};
链接:https://ac.nowcoder.com/acm/contest/6489/B
来源:牛客网
题目描述
牛牛有一个长度为N的由小写字母组成的字符串S,还有一个整数K。在每一步中,牛牛都可以选择一个位置 i 并在 i 和 i + K 处交换字符(i + K < N)并且S_i < S_{i+k}S
i
<S
i+k
,即交换之后,新形成的字符串应字典序大于旧字符串。牛牛想尽可能交换尽量多的步数。他想知道最多可以交换多少步呢。
示例1
输入
复制
“cbexa”,2
输出
复制
2
说明
cbexa -> cxeba -> excba 步数为2
备注:
1 \leq N \leq 1e5, 1 \leq k \leq N1≤N≤1e5,1≤k≤N
class Solution {
public:
/**
*
* @param s string字符串 s.size() <= 1e5
* @param k int整型 k <= s.size()
* @return int整型
*/
int c[30];
int lowbit(int x){
return x&(-x);
}
void add(int x,int k){
while(x<30){
c[x]+=k;
x+=lowbit(x);
}
}
int query(int x){
int ans=0;
while(x){
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
int turn(string s, int k) {
int ans=0;
int len=s.size();
for(int i=0;i<k;i++){
memset(c,0,sizeof(c));
for(int j=i;j<len;j+=k){
add(s[j]-'a'+1,1);
ans+=query(s[j]-'a');
}
}
return ans;
}
};