四川网站建设外包,手机制作表格的软件免费,免费logo图标生成,模板网站是啥意思题目地址
题目PDF地址
题解地址
Problem A. 小水獭游河南 ∣ a ∣ ≤ ∣ Σ ∣ 26 #xff0c;暴力枚举 a 判断 b 是否为是回文串即可#xff0c;时间复杂度 O ( ∣ Σ ∣ ∣ s ∣ ) 。 |a| ≤ |Σ| 26#xff0c;暴力枚举 a 判断 b 是否为是回文串即可#xff0c;时间…题目地址
题目PDF地址
题解地址
Problem A. 小水獭游河南 ∣ a ∣ ≤ ∣ Σ ∣ 26 暴力枚举 a 判断 b 是否为是回文串即可时间复杂度 O ( ∣ Σ ∣ ∣ s ∣ ) 。 |a| ≤ |Σ| 26暴力枚举 a 判断 b 是否为是回文串即可时间复杂度 O(|Σ||s|)。 ∣a∣≤∣Σ∣26暴力枚举a判断b是否为是回文串即可时间复杂度O(∣Σ∣∣s∣)。
#includebits/stdc.h
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int T;cinT;while(T--){string s;cins;if(s.size()1) {coutNaN\n;continue;} mapchar,int b;bool okfalse;for(int i0;is.size();i){if(b[s[i]]) break;string strs.substr(i1);string ssstr;reverse(str.begin(),str.end());if(strss){coutHE\n;oktrue;break;} b[s[i]];}if(!ok) coutNaN\n;}return 0;
}Problem B. Art for Rest
#includebits/stdc.h
using namespace std;const int N 1000001, M 21;
int f[N][M],g[N][M];
int lg[N],a[N];
int n;bool st[N];inline int max(int A,int B)
{return AB?A:B;
}inline int min(int A,int B)
{return AB?A:B;
}void init()
{lg[1]0;for(int i2;i1000000;i) lg[i]lg[i1]1;for(int j0;j20;j)for(int i1;i(1j)-1n;i)if(!j) f[i][j]g[i][j]a[i];else{f[i][j]max(f[i][j-1],f[i(1(j-1))][j-1]);g[i][j]min(g[i][j-1],g[i(1(j-1))][j-1]);}
}inline int query_max(int l,int r)
{int klg[r-l1];return max(f[l][k],f[r-(1k)1][k]);
}inline int query_min(int l,int r)
{int klg[r-l1];return min(g[l][k],g[r-(1k)1][k]);
}int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cinn;for(int i1;in;i) cina[i];if(is_sorted(a1,an1)){coutn;return 0;}init();int res1;for(int k2;kn-1;k){if(st[k]){res;continue;}bool oktrue;int l1,rk;while(rn){int mxquery_max(l,r);int mnquery_min(lk,min(rk,n));if(mxmn){okfalse;break;}lk,rk;}if(ok){for(int jk;jn-1;jk)st[j]true;res;}}coutres;return 0;
}Problem E. 矩阵游戏
#includebits/stdc.h
using namespace std;const int N 510, M 1010;
char s[N][N];
int dp[3][N][M];int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int T;cinT;while(T--){int n,m,x;cinnmx;for(int i1;in;i)for(int j1;jm;j)cins[i][j];for(int k0;k2;k)for(int i0;im;i)for(int j0;jx;j)dp[k][i][j]0;for(int i1;in;i)for(int j1;jm;j)for(int k0;kx;k)if(s[i][j]0) dp[i1][j][k]max(dp[i1][j-1][k],dp[(i-1)1][j][k]);else if(s[i][j]1) dp[i1][j][k]max(dp[i1][j-1][k],dp[(i-1)1][j][k])1;else{if(k1) dp[i1][j][k]max(dp[i1][j-1][k-1],dp[(i-1)1][j][k-1])1;else dp[i1][j][k]max(dp[i1][j-1][k],dp[(i-1)1][j][k]);}coutdp[n1][m][x]\n;}return 0;
}Problem F. Art for Last
#includebits/stdc.h
using namespace std;typedef long long LL;
const int N 500010;
int a[N];int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int n,k;cinnk;for(int i1;in;i) cina[i];sort(a1,an1);multisetint b;for(int i2;ik-1;i)b.insert(a[i]-a[i-1]);LL res1e18;for(int ik;in;i){b.insert(a[i]-a[i-1]);resmin(res,(LL)*b.begin()*(a[i]-a[i-k1]));b.erase(b.lower_bound(a[i-k2]-a[i-k1]));}coutres;return 0;
}Problem G. Toxel 与字符画
按照题意模拟即可。例如一种实现方式是将题面提供的各种字符画在程序中存入一个二维字符矩阵中。随后计算表达式的值并求出该表达式所需使用的各个字符。最后根据这些字符找到相对应的字符画拼接在答案后即可。
#includebits/stdc.h
using namespace std;typedef long long LL;string a[]
{.................................................................................,.................................................................................,.0000000.......1.2222222.3333333.4.....4.5555555.6666666.7777777.8888888.9999999.,.0.....0.......1.......2.......3.4.....4.5.......6.............7.8.....8.9.....9.,.0.....0.......1.......2.......3.4.....4.5.......6.............7.8.....8.9.....9.,.0.....0.......1.2222222.3333333.4444444.5555555.6666666.......7.8888888.9999999.,.0.....0.......1.2.............3.......4.......5.6.....6.......7.8.....8.......9.,.0.....0.......1.2.............3.......4.......5.6.....6.......7.8.....8.......9.,.0000000.......1.2222222.3333333.......4.5555555.6666666.......7.8888888.9999999.,.................................................................................
};
string b[]
{.............................................................,.00000.....1.22222.33333.4...4.55555.66666.77777.88888.99999.,.0...0.....1.....2.....3.4...4.5.....6.........7.8...8.9...9.,.0...0.....1.22222.33333.44444.55555.66666.....7.88888.99999.,.0...0.....1.2.........3.....4.....5.6...6.....7.8...8.....9.,.00000.....1.22222.33333.....4.55555.66666.....7.88888.99999.,.............................................................,.............................................................,.............................................................,.............................................................
};
string c[]
{.................................,.................................,.........IIIIIII.N.....N.FFFFFFF.,............I....NN....N.F.......,.....I....N.N...N.F.......,............I....N..N..N.FFFFFFF.,.....I....N...N.N.F.......,............I....N....NN.F.......,.........IIIIIII.N.....N.F.......,.................................
};int main()
{int T;scanf(%d,T);while(T--){LL x,y;scanf(%lld^{%lld},x,y);__int128 sum1;bool okfalse;if(x!1){for(LL i1; iy; i){sum*x;if(sum1000000000000000000ll){oktrue;break;}}}vectorstring res(10);string xxto_string(x);string yyto_string(y);for(int i0; ixx.size(); i){int numberxx[i]-0;for(int k0; k8; k)for(int j0; j10; j)res[j].push_back(a[j][number*8k]);}for(int i0; iyy.size(); i){int numberyy[i]-0;for(int k0; k6; k)for(int j0; j10; j)res[j].push_back(b[j][number*6k]);}for(int k0; k8; k)for(int j0; j10; j)res[j].push_back(c[j][k]);if(ok){for(int k8; k33; k)for(int j0; j10; j)res[j].push_back(c[j][k]);}else{string zzto_string((LL)sum);for(int i0; izz.size(); i){int numberzz[i]-0;for(int k0; k8; k)for(int j0; j10; j)res[j].push_back(a[j][number*8k]);}for(int j0; j10; j)res[j].push_back(.);}for(auto line:res)printf(%s\n,line.c_str());}return 0;
}Problem H. Travel Begins
Problem K. 排列与质数
对于 n ≤ 11可以暴力枚举排列求解 对于 n 11 的奇数先将数按照 1, 3, 5, . . . , n − 2, n, n −3, n − 5, . . . , 8, 6, 4 排列 对于 n 11 的偶数先将数按照 1, 3, 5, . . . , n − 3, n, n −2, n − 4, . . . , 8, 6, 4 排列 即先将奇数升序排列再将偶数降序排列。
可以发现现在除了 2 和 n − 1 以外所有数均已出现且满足题目的限制。那么我们只需要将这两个数插进合适的位置即可。容易发现一定有解因为可以将 2 插在 5 和 7 之间将n − 1 插在 n − 4 和 n − 6 之间。 复杂度取决于判断质数的速度 O ( n √ n ) O(n√n) O(n√n) 已经足以通过此题。
#includebits/stdc.h
using namespace std;bool p(int n)
{if(n1) return false;for(int i2;in/i;i)if(n%i0)return false;return true;
}int main()
{int n;cinn;if(n4) cout-1;else if(n11){vectorint pos(n);for(int i0;in;i) pos[i]i1;do{bool okfalse;for(int i1;in;i)if(!p(abs(pos[i]-pos[i-1]))){oktrue;break;}if(!p(abs(pos[0]-pos[n-1]))) oktrue;if(!ok){for(auto c:pos)coutc ;break;}}while(next_permutation(pos.begin(),pos.end()));}else{vectorint res;if(n1){for(int i1;in;i2)res.push_back(i);for(int in-3;i4;i-2)res.push_back(i);for(int i0;ires.size();i){coutres[i] ;if(res[i]5) cout2 ;if(res[i]n-6) coutn-1 ;}}else{for(int i1;in-3;i2)res.push_back(i);for(int in;i4;i-2)res.push_back(i);for(int i0;ires.size();i){coutres[i] ;if(res[i]5) cout2 ;if(res[i]n-4) coutn-1 ;}} }return 0;
}