CF1562A The Miracle and the Sleeper
题面
对给定区间 l,r,≤ 10^91≤l≤r≤109 求区间内的两个数 a,b,b \le ab≤a 使得a mod b的值最大,并输出这个值。
输入一行一个数 t,t\le10^4t≤104表示样例个数。接下来 t 行,每行两个数 l、r,表示一次询问。 输出分 t 行表示每个询问的答案。
code
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n, l, r;//一个数d被取模可被保留的最大值为d % ((d >> + 1) + 1)
int main(){
scanf("%d",&n);
while(n--)
{
scanf("%d%d", &l, &r);
if(l == r) cout << 0 << endl;
else
{
int d = r - l;
if(l <= (r >> 1) + 1) cout << r % ((r >> 1) + 1) << endl;//如果这个数的最小值小于可选择的最优取模解时,直接输出这个的取模的解即可。
else cout << r - l << endl;//如果这个的结果较小的话,那么可以直接输出l - r;
}
}
return 0;
}
CF1562B Scenes From a Memory
题面
大致题意
给出一个正整数n 中不包含 00。求最大删去多少位使其变成一个合数或 1。数据保证一定存在答案。
素数是指除 1 和它本身外没有除数的数。合数是指一个有两个以上除数的数。1 既不是质数也不是合数。
code
#include <bits/stdc++.h>
using namespace std;
int T, k;
string s;
bool isPrime[100];
bool check(int x){//预处理100一类的所有素数
if (x < 2)return false;
for (int i = 2; i * i <= x; ++i){
if (x % i == 0)return false;
}
return true;
}
void pre_work(){
for (int i = 2; i <= 99; ++i) isPrime[i] = check(i);
}
void solve(){//如果数中含有1,4 6, 8, 9这样的数时就可以直接删除到这最后一个数
for (int i = 0; i < s.size(); ++i){
if (s[i] == '1' || s[i] == '4' || s[i] == '6' || s[i] == '8' || s[i] == '9'){
cout << "1\n";
cout << s[i] << endl;
return;
}
}
for (int i = 0; i < s.size(); ++i){//如果不满足这两种条件的话可以两两判断是否为素数,存在的话就直接的输出。(因为数据保证了一定存在答案)
for (int j = i + 1; j < s.size(); ++j){
int cur = (s[i] - '0') * 10 + (s[j] - '0');
if (!isPrime[cur]){
cout << "2\n";
cout << cur << endl;
return;
}
}
}
return;
}
int main(){
std::ios::sync_with_stdio(false);
cin >> T;
pre_work();
while (T--){
cin >> k >> s;
solve();
}
return 0;
}
Rings
题意
code
#include <cstdio>
int t, n;
char s[20003];
int main() {
scanf("%d", &t);
while (t--) {
scanf("%d%s", &n, s + 1);
bool ok = 0;//0表示符合情况4
for (int i = 1; i <= n; i++)
if (s[i] == '0'){
ok = 1;
if (i > (n >> 1))//此时[1,i-1]长度大于等于[n/2]
printf("1 %d 1 %d\n", i, i - 1);
else//否则[i+1,n]长度大于等于[n/2]
printf("%d %d %d %d\n", i, n, i + 1, n);
break;
}
if (!ok)//此时两个子串[1,n-1],[2,n]长度相同,且数值一样
printf("1 %d 2 %d\n", n - 1, n);
}
return 0;
}