A.因为最多有26种情况(a最多26个情况)然后暴力判断b是不是回文串就行
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
const int N = 2e5+10;
int n,m;
void solve(){
string s;
cin>>s;
vector<int> c(27,0);
int l=0;
n=s.size();
if(n==1){
cout<<"NaN\n";
return ;
}
for(int i=0;i<n;i++){
int x=s[i]-'a';
if(c[x]==0)
{
int l=i+1,r=n-1;
bool f=true;
while(l<r)
{
if(s[l]!=s[r])
{
f=false;
break;
}
else{
l++,r--;
}
}
if(f){
cout<<"HE\n";
return ;
}
}
else{
break;
}
c[x]++;
}
cout<<"NaN\n";
}
int main()
{
cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
int t;
cin>>t;
while(t--) solve();
}
B.首先固定一个k咋判断呢
要求升序=min(a[i:i+m-1])>max(a[1:i])
多个k呢,类似于筛法直接判断每个k即可
复杂度调和级数级别
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
const int N = 1e6+10;
int n,m;
int a[N];
int mn[N],mx[N];
void solve(){
cin>>n;
memset(mn,0x3f,sizeof(mn));
for(int i=1;i<=n;i++){
cin>>a[i];
mx[i]=max(mx[i-1],a[i]);
}
for(int i=n;i>=1;i--)
{
//mx[i]=max(mx[i+1],a[i]);
mn[i]=min(mn[i+1],a[i]);
}
int cnt=0;
for(int i=1;i<=n;i++){
bool flag=true;
for(int j=1;j<=n;j+=i)
{
if(mx[j-1]<=mn[j]){
continue;
}
else
{
flag=false;
break;
}
}
if(flag) cnt++;
}
cout<<cnt<<"\n";
}
signed main()
{
cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
int t=1;
//cin>>t;
while(t--) solve();
}
F.首先挑选m个数让每个数min(差值)*max(差值)
贪心:差值最小肯定是相邻的,所以排序就行,
转变成挑选m个连续的数计算贡献---滑动窗口
然后还要维护每个m个数相邻的差值最小值,我是直接用的multiset边插入边修改的
复杂度nlogn
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
#define int long long
const int N = 5e5+10;
int n,m;
int a[N];
void solve(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
multiset<int> st;
int res=0x3f3f3f3f;
for(int i=2;i<=m;i++)
{
st.insert(a[i]-a[i-1]);
}
res=(a[m]-a[1])*(*st.begin());
int r=m+1;
int l=2;
while(r<=n)
{
st.erase(st.lower_bound(a[l]-a[l-1]));
st.insert(a[r]-a[r-1]);
res=min(res,(a[r]-a[r-m+1])*(*st.begin()));
l++;
r++;
}
cout<<res<<"\n";
}
signed main()
{
cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
int t=1;
//cin>>t;
while(t--) solve();
}
E:常规dp
k要倒序枚举,类似于一维背包的体积
复杂度nmk
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
const int N = 1e6+10;
int n,m,K;
char a[510][510];
void solve(){
cin>>n>>m>>K;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
cin>>a[i][j];
}
vector<vector<int>> f(m+1,vector<int>(K+1,0));
//memset(f,0,sizeof(f));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=K;k>=0;k--)
{
if(a[i][j]=='0'||a[i][j]=='1')
{
f[j][k]=max(f[j-1][k]+(a[i][j]=='1'),f[j][k]+(a[i][j]=='1'));
}
else
{
f[j][k]=max({f[j][k],f[j][k],f[j-1][k]});
if(k)
f[j][k]=max({f[j][k],f[j][k-1]+1,f[j-1][k-1]+1});
}
}
}
}
cout<<f[m][K]<<"\n";
}
signed main()
{
cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
int t=1;
cin>>t;
while(t--) solve();
}
G:模拟:
不想写了放弃
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
const int N = 1e6+10;
typedef long long LL;
int n,m,K;
string sda[15][15];
string sxiao[15][15];
string deng[15],inf[N];
//跟顶端距离2 大 7*7
//跟顶端距离1 小 5*5
//跟底部左边距离都是1
int qmi(int a, int k) // 求a^k mod p
{
int res = 1;
while (k)
{
if (k & 1) res = (LL)res * a ;
a = (LL)a * a ;
k >>= 1;
}
return res;
}
void solve(){
LL x,y;
scanf("%lld^{%lld}",&x,&y);
}
signed main()
{
//cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
deng[0]="........";
deng[1]="........";
deng[2]="........";
deng[3]="........";
deng[4]=".=======";
deng[5]="........";
deng[6]=".=======";
deng[7]="........";
deng[8]="........";
deng[9]="........";
inf[0]="........................";
inf[1]="........................";
inf[2]=".IIIIIII.N.....N.FFFFFFF";
inf[3]="....I....NN....N.F......";
inf[4]="....I....N.N...N.F......";
inf[5]="....I....N..N..N.FFFFFFF";
inf[6]="....I....N...N.N.F......";
inf[7]="....I....N....NN.F......";
inf[8]=".IIIIIII.N.....N.F......";
inf[9]="........................";
sda[0][0]="........",sxiao[0][0]="......";
sda[0][1]="........",sxiao[0][1]=".00000";
sda[0][2]=".0000000",sxiao[0][2]=".0...0";
sda[0][3]=".0.....0",sxiao[0][3]=".0...0";
sda[0][4]=".0.....0",sxiao[0][4]=".0...0";
sda[0][5]=".0.....0",sxiao[0][5]=".00000";
sda[0][6]=".0.....0",sxiao[0][6]="......";
sda[0][7]=".0.....0",sxiao[0][7]="......";
sda[0][8]=".0000000",sxiao[0][8]="......";
sda[0][9]="........",sxiao[0][9]="......";
sda[1][0]="........",sxiao[1][0]="......";
sda[1][1]="........",sxiao[1][1]=".....1";
sda[1][2]=".......1",sxiao[1][2]=".....1";
sda[1][3]=".......1",sxiao[1][3]=".....1";
sda[1][4]=".......1",sxiao[1][4]=".....1";
sda[1][5]=".......1",sxiao[1][5]=".....1";
sda[1][6]=".......1",sxiao[1][6]="......";
sda[1][7]=".......1",sxiao[1][7]="......";
sda[1][8]=".......1",sxiao[1][8]="......";
sda[1][9]="........",sxiao[1][9]="......";
sda[2][0]="........",sxiao[2][0]="......";
sda[2][1]="........",sxiao[2][1]=".22222";
sda[2][2]=".2222222",sxiao[2][2]=".....2";
sda[2][3]=".......2",sxiao[2][3]=".22222";
sda[2][4]=".......2",sxiao[2][4]=".2....";
sda[2][5]=".2222222",sxiao[2][5]=".22222";
sda[2][6]=".2......",sxiao[2][6]="......";
sda[2][7]=".2......",sxiao[2][7]="......";
sda[2][8]=".2222222",sxiao[2][8]="......";
sda[2][9]="........",sxiao[2][9]="......";
sda[3][0]="........",sxiao[3][0]="......";
sda[3][1]="........",sxiao[3][1]=".33333";
sda[3][2]=".3333333",sxiao[3][2]=".....3";
sda[3][3]=".......3",sxiao[3][3]=".33333";
sda[3][4]=".......3",sxiao[3][4]=".....3";
sda[3][5]=".3333333",sxiao[3][5]=".33333";
sda[3][6]=".......3",sxiao[3][6]="......";
sda[3][7]=".......3",sxiao[3][7]="......";
sda[3][8]=".3333333",sxiao[3][8]="......";
sda[3][9]="........",sxiao[3][9]="......";
sda[4][0]="........",sxiao[4][0]="......";
sda[4][1]="........",sxiao[4][1]=".4...4";
sda[4][2]=".4.....4",sxiao[4][2]=".4...4";
sda[4][3]=".4.....4",sxiao[4][3]=".44444";
sda[4][4]=".4.....4",sxiao[4][4]=".....4";
sda[4][5]=".4444444",sxiao[4][5]=".....4";
sda[4][6]=".......4",sxiao[4][6]="......";
sda[4][7]=".......4",sxiao[4][7]="......";
sda[4][8]=".......4",sxiao[4][8]="......";
sda[4][9]="........",sxiao[4][9]="......";
sda[5][0]="........",sxiao[5][0]="......";
sda[5][1]="........",sxiao[5][1]=".55555";
sda[5][2]=".5555555",sxiao[5][2]=".5....";
sda[5][3]=".5......",sxiao[5][3]=".55555";
sda[5][4]=".5......",sxiao[5][4]=".....5";
sda[5][5]=".5555555",sxiao[5][5]=".55555";
sda[5][6]=".......5",sxiao[5][6]="......";
sda[5][7]=".......5",sxiao[5][7]="......";
sda[5][8]=".5555555",sxiao[5][8]="......";
sda[5][9]="........",sxiao[5][9]="......";
sda[6][0]="........",sxiao[6][0]="......";
sda[6][1]="........",sxiao[6][1]=".66666";
sda[6][2]=".6666666",sxiao[6][2]=".6....";
sda[6][3]=".6......",sxiao[6][3]=".66666";
sda[6][4]=".6......",sxiao[6][4]=".6...6";
sda[6][5]=".6666666",sxiao[6][5]=".66666";
sda[6][6]=".6.....6",sxiao[6][6]="......";
sda[6][7]=".6.....6",sxiao[6][7]="......";
sda[6][8]=".6666666",sxiao[6][8]="......";
sda[6][9]="........",sxiao[6][9]="......";
sda[7][0]="........",sxiao[7][0]="......";
sda[7][1]="........",sxiao[7][1]=".77777";
sda[7][2]=".7777777",sxiao[7][2]=".....7";
sda[7][3]=".......7",sxiao[7][3]=".....7";
sda[7][4]=".......7",sxiao[7][4]=".....7";
sda[7][5]=".......7",sxiao[7][5]=".....7";
sda[7][6]=".......7",sxiao[7][6]="......";
sda[7][7]=".......7",sxiao[7][7]="......";
sda[7][8]=".......7",sxiao[7][8]="......";
sda[7][9]="........",sxiao[7][9]="......";
sda[8][0]="........",sxiao[8][0]="......";
sda[8][1]="........",sxiao[8][1]=".88888";
sda[8][2]=".8888888",sxiao[8][2]=".8...8";
sda[8][3]=".8.....8",sxiao[8][3]=".88888";
sda[8][4]=".8.....8",sxiao[8][4]=".8...8";
sda[8][5]=".8888888",sxiao[8][5]=".88888";
sda[8][6]=".8.....8",sxiao[8][6]="......";
sda[8][7]=".8.....8",sxiao[8][7]="......";
sda[8][8]=".8888888",sxiao[8][8]="......";
sda[8][9]="........",sxiao[8][9]="......";
sda[9][0]="........",sxiao[9][0]="......";
sda[9][1]="........",sxiao[9][1]=".99999";
sda[9][2]=".9999999",sxiao[9][2]=".9...9";
sda[9][3]=".9.....9",sxiao[9][3]=".99999";
sda[9][4]=".9.....9",sxiao[9][4]=".....9";
sda[9][5]=".9999999",sxiao[9][5]=".99999";
sda[9][6]=".......9",sxiao[9][6]="......";
sda[9][7]=".......9",sxiao[9][7]="......";
sda[9][8]=".9999999",sxiao[9][8]="......";
sda[9][9]="........",sxiao[9][9]="......";
int t=1;
cin>>t;
while(t--) solve();
}
H.
题目....不解释 实数有小数点,去k个实数加起来=n且0<=每个实数<=n
手完可以发现
当k>2*n:让每2*n个数都是0.5,然后其他数都是0,这样肯定最多的总和,最小就是每个数都取0.49999,然后因为(k*0.5)向下取整肯定>=n,所以最小值是0,最大值是2*n
当k==2*n:让每2*n个数都是0.5,然后其他,数都是0,这样肯定最多的总和,最小就是每个数都取0.49999,但是因为k=n*2全部k-1个数去到0.4999,剩下一个数肯定要大于>0.5,所以最小值是0,最大值是2*n
其他情况:其实也是一样尽可能取0.5,剩下的数只能能取n-(k-1)*0.5,最大值是n+k/2(两个0.5的1所以(k)/2,是因为要剩下一个数注意一下剩下这个数也是可能取到xxx.5的所以同样算上),最小值相反取0.4999同理
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
const int N = 1e6+10;
typedef long long LL;
int n,m,k;
int qmi(int a, int k) // 求a^k mod p
{
int res = 1;
while (k)
{
if (k & 1) res = (LL)res * a ;
a = (LL)a * a ;
k >>= 1;
}
return res;
}
void solve(){
LL x,y;
cin>>n>>k;
if(k>2*n)
{
cout<<"0 "<<2*n<<"\n";
}
else if(k==n*2)
{
cout<<"1 "<<2*n<<"\n";
}
else{
cout<<n-(k-1)/2<<" "<<n+k/2<<"\n";
}
}
signed main()
{
cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
int t=1;
cin>>t;
while(t--) solve();
}
C;我想法就是直接暴力枚举length 然后判断后面有没有重复的字串
import random
import sys
import os
import math
from collections import Counter, defaultdict, deque
from functools import lru_cache, reduce
from itertools import accumulate, combinations, permutations
from heapq import nsmallest, nlargest, heapify, heappop, heappush
from io import BytesIO, IOBase
from copy import deepcopy
import threading
import bisect
# from sortedcontainers import SortedList
BUFSIZE = 4096
class FastIO(IOBase):
newlines = 0
def __init__(self, file):
self._fd = file.fileno()
self.buffer = BytesIO()
self.writable = "x" in file.mode or "r" not in file.mode
self.write = self.buffer.write if self.writable else None
def read(self):
while True:
b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
if not b:
break
ptr = self.buffer.tell()
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
self.newlines = 0
return self.buffer.read()
def readline(self):
while self.newlines == 0:
b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
self.newlines = b.count(b"\n") + (not b)
ptr = self.buffer.tell()
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
self.newlines -= 1
return self.buffer.readline()
def flush(self):
if self.writable:
os.write(self._fd, self.buffer.getvalue())
self.buffer.truncate(0), self.buffer.seek(0)
class IOWrapper(IOBase):
def __init__(self, file):
self.buffer = FastIO(file)
self.flush = self.buffer.flush
self.writable = self.buffer.writable
self.write = lambda s: self.buffer.write(s.encode("ascii"))
self.read = lambda: self.buffer.read().decode("ascii")
self.readline = lambda: self.buffer.readline().decode("ascii")
sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
input = lambda: sys.stdin.readline().rstrip("\r\n")
def I():
return input()
def II():
return int(input())
def MI():
return map(int, input().split())
def LI():
return list(input().split())
def LII():
return list(map(int, input().split()))
def GMI():
return map(lambda x: int(x) - 1, input().split())
def LGMI():
return list(map(lambda x: int(x) - 1, input().split()))
def solve():
s=I()
for i in range(1000,10000+1):
if len(s)%i!=0:continue
if t in s[i:]:
print("NO")
return
print("YES")
#2 0-59
# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
for _ in range(1):
solve()
# 访问 https://www.jetbrains.com/help/pycharm/ 获取 PyCharm 帮助
K:
首先打表1-10得结果
好吧其实没啥明显规律
然后让排列得数最多,肯定优先相邻差值为2
剩下的数直接暴力查找插入哪些值即可
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
const int N = 1e6+10;
typedef long long LL;
int n,m,k;
int a[N];
bool st[N];
bool check(int n){
if(n<=3) return n>1;
if(n%6!=1&&n%6!=5) return false;
for(int i=5;i<=n/i;i+=6){
if(n%i==0||n%(i+2)==0) return false;
}
return true;
}
void solve(){
cin>>n;
for(int i=1;i<=n;i++) a[i]=i;
if(n<=4){
cout<<"-1\n";
return ;
}
if(n<=10)
{
do
{
a[n+1]=a[1];
bool f=true;
for(int i=2;i<=n+1;i++){
int x=abs(a[i]-a[i-1]);
if(!check(x)){
f=false;
break;
}
}
if(f){
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<"\n";
return ;
}
}while(next_permutation(a+1,a+1+n));
}
vector<int> b;
k=(n&1)?0:-1;
for(int i=1;i<=n+k;i+=2)
{
st[i]=true;
b.push_back(i);
}
for(int i=n-3+k;i>=4;i-=2){
st[i]=true;
b.push_back(i);
}
vector<int> res;
for(int i=1;i<=n;i++){
if(!st[i]) res.push_back(i);
}
while(res.size()){
int x=res.back();
res.pop_back();
vector<int> c;
bool f=true;
for(int i=0;i<b.size()-1;i++)
{
c.push_back(b[i]);
if(!f) continue;
if(check(abs(b[i]-x))&&check(abs(b[i+1]-x))){
f=false;
c.push_back(x);
}
}
c.push_back(b.back());
b=c;
}
for(auto&x:b) cout<<x<<" ";
}
signed main()
{
cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
int t=1;
//cin>>t;
while(t--) solve();
}