本地小黑板,学习不迷路
#include<iostream>
#include<cstring>
using namespace std;
const int N=5e5+10;
int n,k,a[N],f[N],l[N],s[N],last[1<<21];
//f[i]表示1~i中最多有多少个不相交区间的异或和为k
//s[i]表示1~i的所有元素的前缀异或值
//l[i]是[l[i],i]区间异或和为k,右端点为i的最小区间
//last[i]表示前缀异或和为i的最后一个位置,注意数据范围
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
memset(last,-1,sizeof last);
last[0]=0;
for(int i=1;i<=n;i++){
s[i]=s[i-1]^a[i]; //前缀异或和
if(last[k^s[i]]!=-1){ //异或和为k^s[i]的位置存在
l[i]=last[k^s[i]]+1;//计算离i最近的左端点
}
last[s[i]]=i; //前缀异或和为s[i]的最后一个位置
}
for(int i=1;i<=n;i++){
f[i]=f[i-1]; //初始值
if(l[i]) f[i]=max(f[i],f[l[i]-1]+1);//状态转移
}
cout<<f[n];
return 0;
}
/* Problem: 异或和
Language: C++ Result: 正确 Time: 2026-08-29 21:59:38
User: admin Problem: 4544 contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,a[110],b[110][110];
int main(){
cin>>n>>m;
for(int i=1;i<=n*m;i++) cin>>a[i];
int a1=a[1],k=1; //a1是小明
sort(a+1,a+n*m+1);
reverse(a+1,a+n*m+1);
for(int j=1;j<=m;j++){//从第1列到第m列
if(j%2==1){ //奇数列
for(int i=1;i<=n;i++){ //从上往下填数
b[i][j]=a[k++];
}
}else{ //偶数列
for(int i=n;i>=1;i--){ //从下往上填数
b[i][j]=a[k++];
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(b[i][j]==a1){ //找到小明
cout<<j<<" "<<i;
return 0;
}
}
}
return 0;
}
/* Problem: 座位
Language: C++ Result: 正确 Time: 2026-08-29 20:19:19
User: admin Problem: 4543 contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
int n,a[1000010];
string s;
int main(){
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9'){
a[++n]=s[i]-'0'; //字符转数字
}
}
sort(a+1,a+n+1); //从小到大
for(int i=n;i>=1;i--) cout<<a[i];
return 0;
}
/* Problem: 拼数
Language: C++ Result: 正确 Time: 2026-08-29 20:08:38
User: admin Problem: 4542 contest_id: 0*/
#include<iostream>
using namespace std;
int n;
string s;
int main(){
cin>>n;
while(n--){
cin>>s;
int ans=3,len=s.size();
for(int i=0;i<len-2;i++){
string ss=s.substr(i,3); //子串是否是MOO MOM OOO OOM
if(ss=="MOO") ans=min(ans,0);
if(ss=="MOM") ans=min(ans,1);
if(ss=="OOO") ans=min(ans,1);
if(ss=="OOM") ans=min(ans,2);
}
if(ans==3) cout<<"-1"<<endl;
else cout<<ans+s.size()-3<<endl;
}
return 0;
}
/* Problem: 字符变化
Language: C++ Result: 正确 Time: 2026-08-29 17:54:20
User: admin Problem: 2663 contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[110][110],s=0,c=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) cin>>a[i][j];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]<=50){ //是个肿瘤细胞
s++; //面积
if(a[i-1][j]>50||a[i+1][j]>50||a[i][j-1]>50||a[i][j+1]>50){//a[i][j]的上下左右只要有一个数>50的
c++; //周长
}
}
}
}
cout<<s<<" "<<c;
return 0;
}
/*
面积:a[i][j]<=50,则计数+1
周长:a[i][j]<=50,且a[i][j]的上下左右只要有一个数>50的,则计数+1
*/
/* Problem: 肿瘤检测
Language: C++ Result: 正确 Time: 2026-08-29 15:48:42
User: admin Problem: 1687 contest_id: 0*/
#include<iostream>
using namespace std;
int a[10][10];
int main(){
for(int i=1;i<=5;i++)
for(int j=1;j<=5;j++) cin>>a[i][j];
for(int i=1;i<=5;i++){ //从第1行~第5行依次找到每一行的最大值x
int mx=0,x,y,flag=0;
for(int j=1;j<=5;j++){//遍历第i行的每一个数字
if(mx<a[i][j]){ //更新第i行的最大值
mx=a[i][j];
x=i; y=j;
}
}
//判断mx是否是第y列的最小值
for(int k=1;k<=5;k++){ //遍历第y列的每一行
if(a[k][y]<mx){ //mx不是第y列的最小值
flag=1; //标记不是鞍点
break;
}
}
if(flag==0){ //mx是鞍点
cout<<x<<" "<<y<<" "<<mx; return 0;
}
}
cout<<"not found";
return 0;
}
/*
从第1行~第5行依次找到每一行的最大值x
然后,再判断x是不是所在列的最小值
*/
/* Problem: 计算鞍点
Language: C++ Result: 正确 Time: 2026-08-29 15:28:03
User: admin Problem: 1646 contest_id: 0*/
#include<iostream>
using namespace std;
int n,m,ans=0;
char a[110][110];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) cin>>a[i][j];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]=='#'){//碰到草,下和右改成空地
ans++; //草堆计数+1
a[i][j+1]='.';
a[i+1][j]='.';
}
}
}
cout<<ans;
return 0;
}
/* Problem: 最好的草
Language: C++ Result: 正确 Time: 2026-08-29 15:05:10
User: admin Problem: 1681 contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[15][15];
int main(){
cin>>n;
a[1][1]=1;
for(int i=2;i<=n;i++){
for(int j=1;j<=i;j++){ //第i行有i个数字
a[i][j]=a[i-1][j-1]+a[i-1][j]; //左上方的数字+正上方的数字
}
}
for(int i=1;i<=n;i++){ //输出:第1行~第n行
for(int j=1;j<=i;j++){ //第i行有i个数字
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
/* Problem: 杨辉三角
Language: C++ Result: 正确 Time: 2026-08-29 15:04:17
User: admin Problem: 1582 contest_id: 0*/
#include<iostream>
using namespace std;
int n,m;
char a[110][110];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]=='*'){ //该位置是一个地雷,直接输出
cout<<a[i][j];
}else{ //否则,该位置是一个空地,数一数八个方向的地雷数量
int sum=0; //地雷数量初始化
if(a[i-1][j]=='*') sum++;
if(a[i+1][j]=='*') sum++;
if(a[i][j-1]=='*') sum++;
if(a[i][j+1]=='*') sum++;
if(a[i-1][j-1]=='*') sum++;
if(a[i-1][j+1]=='*') sum++;
if(a[i+1][j-1]=='*') sum++;
if(a[i+1][j+1]=='*') sum++;
cout<<sum; //输出该位置的八个方向地雷数量
}
}
cout<<endl; //内层循环结束,每一行要换行
}
return 0;
}
/* Problem: 扫雷游戏
Language: C++ Result: 正确 Time: 2026-08-29 14:36:35
User: admin Problem: 1974 contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
cin>>n;
if(n%2==1){//如果n是奇数,则求1-n之间所有的偶数之和
for(int i=2;i<=n;i+=2){ //枚举1~n的所有偶数
ans+=i; //所有偶数之和
}
}else{ //否则,n是偶数,则求n所有的约数(也就是因子)之和
for(int i=1;i<=n;i++){//枚举1~n的每一个数字,判断i是否是n的因子
if(n%i==0){ //i是n的因子
ans+=i; //n的因子之和
}
}
}
cout<<ans;
return 0;
}
/* Problem: 判奇偶求和
Language: C++ Result: 正确 Time: 2026-08-28 20:30:42
User: admin Problem: 3035 contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
cin>>n;
for(int i=10;i<=n;i++){ //循环枚举10~n之间的每一个数字
//判断每个数字:i的十位或个位是否为0
if(i%10==0 || i/10%10==0){ //i的十位或个位为0
ans++; //含0的数字个数+1,即答案+1
}
}
cout<<ans;
return 0;
}
/*
判断10~n中的每一个数字的个位、十位是否为0
1 如果个位或十位为0,则是含0的数字,答案+1
2 否则,答案不变
*/
/* Problem: 有0的数
Language: C++ Result: 正确 Time: 2026-08-28 20:03:14
User: admin Problem: 3536 contest_id: 0*/
#include<iostream>
using namespace std;
typedef long long ll;
ll qpow(ll a,ll b,ll mod){ //快速幂模板
int res=1;
while(b){
if(b&1) res=res*a%mod; //最后一位是1
b>>=1; //抹掉最后1位
a=(a*a)%mod; //倍增
}
return res;
}
ll n,m,k,x;
int main(){
cin>>n>>m>>k>>x;
cout<<(x+m*qpow(10,k,n))%n;
return 0;
}
/*
本质是计算(x+m*10^k)%n
*/
/* Problem: 转圈游戏
Language: C++ Result: 正确 Time: 2026-08-28 17:12:38
User: admin Problem: 1717 contest_id: 0*/
#include<iostream>
using namespace std;
int mod=20123;
int n,m,k,ans=0,sum[10010];//sum[i]表示第i层有楼梯的房间数量
struct node{
int up,x;//up表示是否有楼梯
}a[10010][110];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=0;j<m;j++){ //注意:房间编号是0~m-1
cin>>a[i][j].up>>a[i][j].x;
sum[i]+=a[i][j].up; //统计有楼梯的房间数
}
}
cin>>k;
for(int i=1;i<=n;i++){ //模拟:一层一层向上爬
ans=(ans+a[i][k].x)%mod; //每一层入口房间的数字x之和是密钥
int x=a[i][k].x%sum[i];
if(x==0) x=sum[i]; //特判
//从k开始,逆时针找到第x个有楼梯的房间,从该房间向上走
int t=k; //当前房间编号
while(x>0){ //一共需要找到第x个有楼梯的
if(a[i][t].up){ //如果房间t有楼梯
x--; //找到了1个
k=t; //有可能从这里上去
}
t++; //继续判断下一个房间编号
if(t==m) t=0; //房间是一个圈
}
}
cout<<ans;
return 0;
}
/* Problem: 寻宝
Language: C++ Result: 正确 Time: 2026-08-28 16:55:38
User: admin Problem: 1479 contest_id: 0*/
#include<iostream>
using namespace std;
int t,m,a,b,c;
int gcd(int x,int y){//最大公约数
if(y==0) return x;
return gcd(y,x%y);
}
int main(){
cin>>t>>m;
while(t--){
cin>>a>>b>>c;
if(a<0) a=-a,b=-b,c=-c; //如果系数a是负数,全部乘以-1
int delta=b*b-4*a*c;
if(delta<0){ //无解
cout<<"NO"<<endl;
}else if(delta==0){ //一个解
int d=gcd(2*a,abs(b));
int x=-b/d, y=2*a/d; //x表示分子,y表示分母
if(y==1) cout<<x<<endl; //分母为1,直接输出分子
else cout<<x<<"/"<<y<<endl;
}else{ //两个解,则输出较大的解
int z=1; //根号前的系数初始值
for(int i=2;i*i<=delta;i++){
while(delta%(i*i)==0){ //有一个i*i的因子
z*=i; //系数增加
delta/=i*i;
}
}
if(delta==1){ //答案就没有根号了
if(z-b==0) cout<<0<<endl;
else{
int d=gcd(2*a,abs(z-b));
int x=(z-b)/d,y=2*a/d;
if(y==1) cout<<x<<endl; //分母为1,直接输出分子
else cout<<x<<"/"<<y<<endl;
}
}else{ //答案仍然有根号
if(b!=0){//先考虑前半截
int d=gcd(2*a,abs(b));
int x=-b/d, y=2*a/d; //x表示分子,y表示分母
if(y==1) cout<<x; //分母为1,直接输出分子
else cout<<x<<"/"<<y;
cout<<"+";
}
int d=gcd(2*a,z); //再考虑后半截
int x=z/d, y=2*a/d; //x表示分子系数,y表示分母
if(y==1){ //分母为1
if(x==1) cout<<"sqrt("<<delta<<")"<<endl; //分子系数也为1
else cout<<x<<"*"<<"sqrt("<<delta<<")"<<endl; //分子系数不为1
}else{ //分母不为1
if(x==1) cout<<"sqrt("<<delta<<")/"<<y<<endl; //分子系数也为1
else cout<<x<<"*"<<"sqrt("<<delta<<")/"<<y<<endl; //分子系数不为1
}
}
}
}
return 0;
}
/* Problem: 一元二次方程
Language: C++ Result: 正确 Time: 2026-08-28 15:37:02
User: admin Problem: 2965 contest_id: 0*/
#include<iostream>
#include<cmath>
using namespace std;
long long n,k,d,e,ans=0;
bool check(long long x){ //判断x是否是完全平方数
long long y=sqrt(x);
return y*y==x;
}
void solve(){//解一元二次方程 -p^2+(n+2-e*d)*p-n=0
long long a=-1;
long long b=n+2-e*d;
long long c=-n;
long long delta=b*b-4*a*c;
if(delta>=0&&check(delta)){//还要判断delta是完全平方数
long long p=(-b+sqrt(delta))/(2*a);
long long q=n/p;
printf("%lld %lld\n",min(p,q),max(p,q));
}else{
printf("NO\n");
}
}
int main(){
scanf("%lld",&k);
while(k--){
scanf("%lld %lld %lld",&n,&d,&e);
solve();
}
return 0;
}
/*
n= p*q
e*d = (p-1)(q-1) + 1
e*d = p*q-p-q+2
n-p-n/p+2-e*d=0
-p^2+(n+2-e*d)*p-n=0
*/
/* Problem: 解密
Language: C++ Result: 正确 Time: 2026-08-28 14:30:22
User: admin Problem: 2462 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
long long k,n,e,d,ans=0;
bool check(long long x){
long long y=sqrt(x);
return y*y==x;
}
void solve(){
long long a=-1,b=n+2-e*d,c=-n,delta=b*b-4*a*c;
if(delta>=0&&check(delta)){
long long p=(-b+sqrt(delta))/(2*a);
long long q=n/p;
cout<<min(p,q)<<' '<<max(p,q)<<endl;
}else cout<<"NO\n";
}
int main(){
cin>>k;
while(k--){
cin>>n>>d>>e;
solve();
}
return 0;
}
/* Problem: 解密
Language: C++ Result: 正确 Time: 2026-08-28 14:23:05
User: admin Problem: 2462 contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
int n,a[200010],b[200010],ans=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<n;i++) cin>>b[i];
sort(a+1,a+n+1);
sort(b+1,b+n);
reverse(a+1,a+n+1); //倒序,使得从大到小
reverse(b+1,b+n);
//从大到小装箱子
for(int i=1;i<=n;i++){
//如果箱子>=玩具,直接装,不用处理
if(b[i]<a[i]){//而如果箱子<玩具,需要买一个箱子
ans=a[i]; //即答案,剩下的玩具则继续装,必须都能装
for(int j=i+1,k=i;j<=n;j++,k++){//j玩具编号,k箱子编号
if(b[k]<a[j]){//箱子再次出现不匹配
cout<<-1;
return 0;
}
}
cout<<ans;//全部装完了
return 0;
}
}
return 0;
}
/* Problem: 玩具装箱
Language: C++ Result: 正确 Time: 2026-08-28 13:52:02
User: admin Problem: 4906 contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5,M=1e6;
int n,ans;
int s[N];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
s[x]++;
}
for(int i=1;i<=M;i++)s[i]=s[i-1]+s[i];
for(int i=1;i<=M;i++){
int t=(s[i]-s[i-1]);
if(t==0)continue;
ans+=(t-1)*t/2;
for(int j=i;j<=M;j+=i){
int x=min(M,j+i-1);
if(j==i)ans+=(s[x]-s[j])*1*t;
else ans+=(s[x]-s[j-1])*(j/i)*t;
}
}
cout<<ans;
return 0;
}
/* Problem: Max/Min
Language: C++ Result: 正确 Time: 2026-08-26 20:23:27
User: admin Problem: 5096 contest_id: 0*/
#include <cstdio>
using namespace std;
#define int long long
const int mod = 998244353;
int ans;
int n, m, x;
signed main() {
scanf("%lld%lld", &n, &m);
for (int i = 1; m; ++i) {
if (m & 1) {
int j = (1ll << (i - 1));
ans += (((n + 1) / (2 * j)) * j);
ans %= mod;
x = ((n + 1) % (2 * j) - j);
if (x > 0) ans += x;
ans %= mod;
}
m >>= 1;
}
printf("%lld", ans);
return 0;
}
/* Problem: 1的个数
Language: C++ Result: 正确 Time: 2026-08-26 20:16:59
User: admin Problem: 5095 contest_id: 0*/
#include <cstdio>
using namespace std;
int c[110], a[110][110], r[110];
int b[110];
char s[110];
int n, m, k;
int ans;
int count(int x) {
int cnt = 0;
while (x) {
x = x & (x - 1);
cnt++;
}
return cnt;
}
int main() {
scanf("%d%d%d", &n, &m, &k);
for (int i = 1; i <= m; ++i) {
scanf("%d", &c[i]);
for (int j = 1; j <= c[i]; ++j) {
scanf("%d", &a[i][j]);
b[i] += (1 << (a[i][j] - 1));
}
scanf("%s", s + 1);
if (s[1] == 'o') {
r[i] = 1;
} else {
r[i] = 0;
}
}
for (int i = 0; i < (1 << n); ++i) {
int flag = 0;
for (int j = 1; j <= m; ++j) {
flag = flag || ((count(b[j] & i) >= k) != r[j]);
}
if (!flag) {
ans++;
}
}
printf("%d", ans);
return 0;
}
/* Problem: 钥匙
Language: C++ Result: 正确 Time: 2026-08-26 20:11:08
User: admin Problem: 5094 contest_id: 0*/
#include<iostream>
using namespace std;
int n,m,a[110],ans=0;
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++) cin>>a[i];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int x;cin>>x; //第j种营养素得到x
a[j]-=x; //第j种营养素还需要a[j]
}
}
for(int i=1;i<=m;i++){
if(a[i]>0) ans=1; //检查哪一种营养素还需要
}
if(ans==1) cout<<"No";
else cout<<"Yes";
return 0;
}
/* Problem: 营养
Language: C++ Result: 正确 Time: 2026-08-26 20:03:25
User: admin Problem: 5093 contest_id: 0*/
#include <bits/stdc++.h>
#define int long long
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;
int n, cnt, minn = 1e16;
bool flag[N];
struct T3 { int x, y, id; } a[N];
bool operator < (T3 a, T3 b) {
return a.x > b.x || (a.x == b.x && a.y < b.y);
}
unordered_map <int, int> mp;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i].x >> a[i].y, a[i].id = i;
sort (a + 1, a + n + 1);
cnt = n;
for (int i = 1; i <= n; i++) {
if (a[i - 1].x > a[i].x && a[i].y > minn) {
flag[a[i].id] = 1, cnt--;
continue;
}
if (a[i - 1].x == a[i].x && a[i].y > mp[a[i].x]) {
flag[a[i].id] = 1, cnt--;
continue;
}
if (a[i].x != a[i - 1].x) mp[a[i].x] = minn;
minn = min (minn, a[i].y);
}
cout << cnt << '\n';
for (int i = 1; i <= n; i++)
if (!flag[i]) cout << i << ' ';
return 0;
}
/* Problem: 扔卡牌
Language: C++ Result: 正确 Time: 2026-08-26 19:51:48
User: admin Problem: 5082 contest_id: 0*/
#include<iostream>
using namespace std;
int n,l,r;
int main(){
cin>>n>>l>>r;
for(int i=1;i<l;i++) cout<<i<<" ";
for(int i=r;i>=l;i--) cout<<i<<" ";
for(int i=r+1;i<=n;i++) cout<<i<<" ";
return 0;
}
/* Problem: 逆序排列
Language: C++ Result: 正确 Time: 2026-08-26 12:23:16
User: admin Problem: 5092 contest_id: 0*/
#include <bits/stdc++.h> //扫描线
using namespace std;
#define int long long
#define endl '\n'
const int N = 2e3 + 5;
int n, c, ans;
struct Node {
int t, p;
};
bool operator<(Node x, Node y) {
if(x.p != y.p) return x.p < y.p;
else return x.t < y.t;
}
vector<Node> d;
signed main() {
cin>>n;
for(int i = 1; i <= n; i++) {
int l, r; cin>>l>>r;
d.push_back({0, l}); d.push_back({1, r});
}
sort(d.begin(), d.end());
for(auto i : d) {
if(!i.t) c++;
else ans += (--c);
}
cout<<ans<<endl;
}
/* Problem: 区间相交
Language: C++ Result: 正确 Time: 2026-08-26 12:14:02
User: admin Problem: 5089 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int n;
struct node {
int l,r;
} a[500050],b[500050],c[500050];
bool st1(const node &x,const node &y){
return x.l < y.l;
}
bool st2(const node &x,const node &y){
return x.r < y.r;
}
long long sum = 0;
int main(){
scanf("%d",&n);
for (int i = 1; i <= n; i++) scanf("%d%d",&a[i].l,&a[i].r);
memcpy(b,a,sizeof(b));
memcpy(c,a,sizeof(c));
sort(b + 1,b + n + 1,st1);
sort(c + 1,c + n + 1,st2);
//复制,排序
for (int i = 1; i <= n; i++) {
int l,r,mid;
l = 0,r = n + 1;
while (l + 1 < r) {
mid = (l + r) / 2;
if (b[mid].l > a[i].r) r = mid;
else l = mid;
}
sum += n - r + 1;
//l_j > r_i
l = 0,r = n + 1;
while (l + 1 < r) {
mid = (l + r) / 2;
if (c[mid].r < a[i].l) l = mid;
else r = mid;
}
sum += l;
//r_j < l_i
}
sum /= 2;
printf("%lld",1LL * n * (n - 1) / 2 - sum);
return 0;
}
/* Problem: 区间相交
Language: C++ Result: 正确 Time: 2026-08-26 12:00:43
User: admin Problem: 5089 contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
const int N=3e5+15;
int n,t;
int a[N];
int h[N],l[N],x1,x2;
/*
h[N]:行
l[N]:列
x1:左上到右下的对角线
x2:右上到左下的对角线
*/
signed main(){
ios::sync_with_stdio(0);
cin>>n>>t;
rep(i,1,n)h[i]=l[i]=n;
x1=x2=n;
rep(i,1,t){
cin>>a[i];
int ll=a[i]%n;
ll==0?ll=n:ll=ll;
int hh=(a[i]-ll)/n+1;
//开始计数
--h[hh];
--l[ll];
if(ll==hh)--x1;//在左上到右下的对角线上
if(ll+hh==n+1)--x2;//在右上到左下的对角线上
if(!x1||!x2||!h[hh]||!l[ll]){//任意一方归零
cout<<i<<endl;
return 0;
}
}
cout<<-1<<endl;
return 0;
}
/* Problem: 回合
Language: C++ Result: 正确 Time: 2026-08-26 11:57:05
User: admin Problem: 5088 contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,a[110],b[110];
char c[210];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=m;i++) cin>>b[i];
sort(a+1,a+n+1); sort(b+1,b+m+1);
int i=1,j=1,k=0;
while(i<=n&&j<=m){ //按照从小到大,合并数组a和数组b
if(a[i]<b[j]) c[++k]='a',i++; //合并a
else c[++k]='b',j++; //合并b
}
while(i<=n) c[++k]='a',i++;
while(j<=m) c[++k]='b',j++;
for(int i=2;i<=k;i++)
if(c[i]==c[i-1]&&c[i]=='a'){//a中元素连续出现
cout<<"Yes"; return 0;
}
cout<<"No";
return 0;
}
/* Problem: 合并数列
Language: C++ Result: 正确 Time: 2026-08-26 11:51:23
User: admin Problem: 5087 contest_id: 0*/
#include<iostream>
using namespace std;
int a,b;
int main(){
cin>>a>>b;
if(a==b) cout<<-1;
else if(a==1&&b==2 || a==2&&b==1) cout<<3;
else if(a==1&&b==3 || a==3&&b==1) cout<<2;
else if(a==3&&b==2 || a==2&&b==3) cout<<1;
return 0;
}
/* Problem: 谁吃了
Language: C++ Result: 正确 Time: 2026-08-26 10:53:04
User: admin Problem: 5086 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=18;
int popcnt(int x){//统计二进制中 1 的个数
int ret=0;
for(;x;x&=x-1)ret++;
return ret;
}
int n;
vector<pair<int,int>>dat;
bitset<(1<<maxn)|9>f;//DP 数组
signed main(){
cin>>n;
for(int i=1,a,b;i<=n;i++)cin>>a>>b,dat.push_back({a,b});
for(int s=0;s<(1<<n);s++)if(popcnt(s)>=2){
for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)
if(((s>>i)&1)&&((s>>j)&1)&&(dat[i].first==dat[j].first||dat[i].second==dat[j].second))//判断是否可以转移
f[s]=f[s]|~f[s^(1<<i)^(1<<j)];//转移
}cout<<(f[(1<<n)-1]?"Takahashi":"Aoki");
}
/* Problem: 卡牌游戏
Language: C++ Result: 正确 Time: 2026-08-26 10:45:47
User: admin Problem: 5084 contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int a,b,c,d,ans=0;
cin>>a>>b>>c>>d;
int x1=a,x2=c,y1=b,y2=d;
while(x1<x2 && x1%4!=0){
if((x1-1)%4==0){
int u=y1,v=y2;
if(abs(u)%2==1) u++,ans+=2;
if(abs(v)%2==1) v--,ans+=1;
if(u<v)ans+=3*((v-u)/2);
}
if((x1-2)%4==0){
int u=y1,v=y2;
if(abs(u)%2==1) u++,ans+=1;
if(abs(v)%2==1) v--;
if(u<v)ans+=((v-u)/2);
}
if((x1-3)%4==0){
int u=y1,v=y2;
if(abs(u)%2==1) u++;
if(abs(v)%2==1) v--,ans+=1;
if(u<v)ans+=((v-u)/2);
}
x1++;
}
while(x2>x1 && x2%4!=0){
if((x2+2)%4==0){
int u=y1,v=y2;
if(abs(u)%2==1) u++,ans+=2;
if(abs(v)%2==1) v--,ans+=1;
if(u<v)ans+=3*(((v-u)/2));
}
if((x2+1)%4==0){
int u=y1,v=y2;
if(abs(u)%2==1) u++,ans+=1;
if(abs(v)%2==1) v--;
if(u<v)ans+=((v-u)/2);
}
if((x2+3)%4==0){
int u=y1,v=y2;
if(abs(u)%2==1) u++,ans+=1;
if(abs(v)%2==1) v--,ans+=2;
if(u<v)ans+=3*((v-u)/2);
}
x2--;
}
ans+=(x2-x1)*(y2-y1);
cout<<ans;
return 0;
}
/* Problem: 壁纸
Language: C++ Result: 正确 Time: 2026-08-26 10:41:34
User: admin Problem: 5083 contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
int n,ans=0;
string s[1010];
int main(){
cin>>n;
for(int i=0,x;i<n;i++){
cin>>s[i]>>x;
ans+=x; //求和
}
sort(s+0,s+n);//排序
cout<<s[ans%n];//输出获胜者
return 0;
}
/* Problem: 获胜
Language: C++ Result: 正确 Time: 2026-08-25 21:10:41
User: admin Problem: 5081 contest_id: 0*/
#include<iostream>
using namespace std;
long long n,m=1,k=2,ans=1;
int main(){
cin>>n;
while(m<=n){
m+=k;
k*=2; //倍增
ans++;
}
cout<<ans;
return 0;
}
/* Problem: 植物高度
Language: C++ Result: 正确 Time: 2026-08-25 20:55:42
User: admin Problem: 5080 contest_id: 0*/
#include <iostream>
using namespace std;
using LL = long long;
const LL kMaxN = 3e5 + 5;
LL tr[kMaxN], nxt[kMaxN][26], n, cnt = 1, ans; // cnt 初始化为 1,因为需要一个额外的根
string s;
void add(const string &s) { // 加入字符串 s
LL p = 1;
for (char c : s) { // 遍历每一个字符
if (!nxt[p][c - 'a']) { // 如果不存在
p = nxt[p][c - 'a'] = ++cnt; // 新申请一个儿子
} else { // 已经存在
p = nxt[p][c - 'a']; // 直接跳过去
}
ans += tr[p]; // 累加答案
tr[p]++; // 路径上的数加一
}
}
int main() {
cin >> n;
for (LL i = 1; i <= n; i++) {
cin >> s;
add(s);
}
cout << ans << '\n';
return 0;
}
/* Problem: 再求和
Language: C++ Result: 正确 Time: 2026-08-25 20:39:51
User: admin Problem: 5078 contest_id: 0*/
#include<cstdio>
#define int long long
using namespace std;
const int N=2e5+10,MOD=998244353; int a[N],sum[N];
int calc(int x) {
int cnt=0;
while(x) cnt=(cnt+1)%MOD,x/=10;
return cnt;
}
int pow10(int x) {
int ans=1;
while(x--) ans=ans*10%MOD;
return ans;
}
signed main() {
int n,ans=0; scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]),sum[i]=(sum[i-1]+a[i])%MOD;
for(int i=2;i<=n;i++) ans=(ans+(sum[i-1]*pow10(calc(a[i]))%MOD+(i-1)*a[i]%MOD)%MOD)%MOD;
printf("%lld",ans);
return 0;
}
/* Problem: 又求和
Language: C++ Result: 正确 Time: 2026-08-25 20:35:35
User: admin Problem: 5077 contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 3e5 + 5;
int n, a[N], daan, gj; // gj表示该减多少个10^8
int merge(int l, int r, int cnt){
if (cnt > a[r]) return r + 1;
while (l < r){
int mid = l + r >> 1;
if (a[mid] >= cnt) r = mid;
else l = mid + 1;
}
return l;
}
// 手写的二分函数
signed main(){
scanf("%lld", &n);
for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++){
daan += a[i];
int now = n - merge(i + 1, n, 100000000 - a[i]) + 1; // now表示当前这个数有多少个跟他加起来超过10^8,如果不想手写二分函数也可以用lower_bound。
gj += now;
}
daan = daan * (n-1) - gj * 100000000;
printf("%lld\n", daan);
return 0;
}
/* Problem: 求和
Language: C++ Result: 正确 Time: 2026-08-25 20:29:07
User: admin Problem: 5076 contest_id: 0*/
#include<iostream>
using namespace std;
int n,k,a[1010],ans=1,last=0;//last表示最后一队的人数
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
if(last+a[i]<=k){
last+=a[i];
}else{
ans++; //新开一个组队
last=a[i]; //重新开始一队
}
}
cout<<ans;
return 0;
}
/* Problem: 组队
Language: C++ Result: 正确 Time: 2026-08-25 20:24:19
User: admin Problem: 5075 contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[1010],ans=-1;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[1]<a[i]){//找到比第一楼高的
ans=i;
break;
}
}
cout<<ans;
return 0;
}
/* Problem: 大楼
Language: C++ Result: 正确 Time: 2026-08-25 20:10:25
User: admin Problem: 5074 contest_id: 0*/
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
int fa[200010];
int tot=0;
ll ans=0;
struct aaa
{
int k;
ll c;
vector<int> s;
}a[200010];
inline bool cmp(aaa x,aaa y)
{
return x.c<y.c;
}
inline int find(int k)
{
if(fa[k]==k) return k;
return fa[k]=find(fa[k]);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i].k>>a[i].c;
for(int j=1;j<=a[i].k;j++)
{
int x;
cin>>x;
a[i].s.push_back(x);
}
}
sort(a+1,a+m+1,cmp);
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++)
{
int fx=find(a[i].s[0]);
for(int j=1;j<=a[i].k-1;j++)
{
int fy=find(a[i].s[j]);
if(fx!=fy)
fa[fy]=fx,ans+=a[i].c,tot++;
if(tot==n-1) break;
}
if(tot==n-1) break;
}
if(tot!=n-1) printf("-1");
else printf("%lld",ans);
return 0;
}
/* Problem: 最小树
Language: C++ Result: 正确 Time: 2026-08-25 18:25:17
User: admin Problem: 5071 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;
LL n, k, a[N], ans = 1e10, pos[N];
set <LL> s;
int main ()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i], pos[a[i]] = i;
for (int i = 1; i <= k; i++) s.insert (pos[i]);
ans = *(--s.end()) - *s.begin();
for (int i = k + 1; i <= n; i++) {
s.erase (pos[i - k]);
s.insert (pos[i]);
ans = min (ans, *(--s.end()) - *s.begin());
}
cout << ans;
return 0;
}
/* Problem: 好序列
Language: C++ Result: 正确 Time: 2026-08-25 18:18:36
User: admin Problem: 5070 contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,ans,mx,a,b;
signed main() {
cin>>n;
for(int i=1; i<=n; i++) {
cin>>a>>b;
ans+=a;//加身体的和的高度
mx=max(mx,b-a);//求出最大头的高度
}
cout<<ans+mx;//最后加和
return 0;
}
/* Problem: 巨人
Language: C++ Result: 正确 Time: 2026-08-25 18:12:43
User: admin Problem: 5069 contest_id: 0*/
#include<iostream>
using namespace std;
string s,t;
int main(){
cin>>s>>t;
for(int i=0,j=0;i<s.size();j++){
if(s[i]==t[j]){ //正确的字符和输入的位置匹配
cout<<j+1<<" ";
i++;
}
}
return 0;
}
/* Problem: 字符匹配
Language: C++ Result: 正确 Time: 2026-08-25 18:07:28
User: admin Problem: 5068 contest_id: 0*/
#include<iostream>
using namespace std;
int n,x,y,z;
int main(){
cin>>n>>x>>y>>z;
if(z>x&&z<y || z>y&&z<x) cout<<"Yes";
else cout<<"No";
return 0;
}
/* Problem: 列车
Language: C++ Result: 正确 Time: 2026-08-25 17:57:00
User: admin Problem: 5067 contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
vector<pair<int, int> > ou, ji;
bool cmp1(pair<int, int> x, pair<int, int> y) {
return x.first < y.first;
}
bool cmp2(pair<int, int> x, pair<int, int> y) {
return x.second < y.second;
}
int solve(vector<pair<int, int> > point) {
for (auto &it : point) {
int x = it.first, y = it.second;
it.first = (x - y) / 2;
it.second = it.first + y;
}
sort(point.begin(), point.end(), cmp1);
int ans = 0, now = 0;
for (int i = 0; i < (int) point.size(); i++) {
ans += point[i].first * i - now;
now += point[i].first;
}
sort(point.begin(), point.end(), cmp2);
int ans2 = 0, now2 = 0;
for (int i = 0; i < (int) point.size(); i++) {
ans2 += point[i].second * i - now2;
now2 += point[i].second;
}
return ans + ans2;
}
signed main() {
cin >> n;
for (int i = 1; i <= n; i++) {
int x, y;
cin >> x >> y;
if ((x + y) % 2 == 0) ou.push_back({x, y});
else ji.push_back({x, y + 1});
}
cout << solve(ou) + solve(ji) << endl;
return 0;
}
/* Problem: 跳跃距离
Language: C++ Result: 正确 Time: 2026-08-25 16:14:58
User: admin Problem: 5066 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
int n, m, res;
char g[N][N];
const int dx[] = {0, 1, 0, -1}, dy[] = {-1, 0, 1, 0};
bool st[N][N];
bool chk(int x, int y) {
for (int i = 0; i < 4; ++ i ) {
int a = x + dx[i], b = y + dy[i];
if (a >= 1 && a <= n && b >= 1 && b <= m) {
if (g[a][b] == '#') return true;
}
}
return false;
}
int bfs(int x, int y) {
if (chk(x, y)) return 1;
if (st[x][y]) return -114514;
queue<pair<int, int> > q;
q.emplace(x, y);
int ans = 0;
st[x][y] = true;
map<pair<int, int>, bool> S;
while (q.size()) {
int x = q.front().first, y = q.front().second;
q.pop();
++ ans;
if (!chk(x, y)) {
for (int i = 0; i < 4; ++ i ) {
int a = x + dx[i], b = y + dy[i];
if (a >= 1 && a <= n && b >= 1 && b <= m && g[a][b] == '.') {
if (chk(a, b)) {
if (!S[{a, b}]) {
q.emplace(a, b);
S[{a, b}] = true;
}
}
else if (!st[a][b]) {
q.emplace(a, b);
st[a][b] = true;
}
}
}
}
}
return ans;
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++ i ) scanf("%s", g[i] + 1);
for (int i = 1; i <= n; ++ i )
for (int j = 1; j <= m; ++ j )
if (g[i][j] != '#')
res = max(res, bfs(i, j));
printf("%d\n", res);
return 0;
}
/* Problem: 自由度
Language: C++ Result: 正确 Time: 2026-08-25 16:09:30
User: admin Problem: 5065 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
const int N=1010,M=1010,P=1e9+7,MOD=998244353;
const double PI=3.1415926,EPS=0.00001;
int n,m,dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int ans,f[N*N],cur;
char a[N][N];
int vis[N][N];
void dfs(int x,int y){
if(a[x][y]=='C'){vis[x][y]=cur;f[cur]++;return;}
if(a[x][y]=='#'){return;}
f[cur]++;
vis[x][y]=cur;
for(int i=0;i<4;i++){
int nx=x+dx[i],ny=y+dy[i];
if(nx<1||ny<1||nx>n||ny>m)continue;
if(vis[nx][ny]==cur)continue;
if(vis[nx][ny]&&a[nx][ny]!='C')continue;
dfs(nx,ny);
}
return;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(a[i][j]=='#'){
for(int k=0;k<4;k++){
int nx=i+dx[k],ny=j+dy[k];
if(a[nx][ny]=='.')a[nx][ny]='C';
}
}
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(a[i][j]!='#'){
if(a[i][j]=='.'&&vis[i][j])continue;
++cur;
dfs(i,j);
ans=max(ans,f[cur]);
}
cout<<ans;
return 0;
}
/* Problem: 自由度
Language: C++ Result: 正确 Time: 2026-08-25 16:09:18
User: admin Problem: 5065 contest_id: 0*/
# include <bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN = 2e5 + 5;
int n; ll a[MAXN];
vector <ll> b;
int main() {
cin >> n;
for(int i = 1; i <= n; ++i) cin >> a[i];
for(int i = 1; i <= n; ++i) {
b.push_back(a[i]);
while(b.size() > 1 && b[b.size() - 1] == b[b.size() - 2]) {
b.pop_back();
++b[b.size() - 1];
}
} cout << b.size();
return 0;
}
/* Problem: 球的合并
Language: C++ Result: 正确 Time: 2026-08-25 16:04:34
User: admin Problem: 5064 contest_id: 0*/
#include<iostream>
using namespace std;
int n;
char a[110][110],b[110][110];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>b[i][j];
if(a[i][j]!=b[i][j]){
cout<<i<<" "<<j;
return 0;
}
}
}
return 0;
}
/* Problem: 不同位置
Language: C++ Result: 正确 Time: 2026-08-25 15:58:55
User: admin Problem: 5063 contest_id: 0*/
#include<iostream>
using namespace std;
int a,b;
int main(){
for(int i=1;i<=9;i++){
int x;cin>>x;
a+=x;
}
for(int i=1;i<=8;i++){
int x;cin>>x;
b+=x;
}
cout<<a-b+1;
return 0;
}
/* Problem: 棒球赛
Language: C++ Result: 正确 Time: 2026-08-25 15:50:36
User: admin Problem: 5062 contest_id: 0*/
#include<bits/stdc++.h>
#define ll long long
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
using namespace std;
int fa[500005];//父节点
ll e[500005];//边数
ll sz[500005];//点数
int Find(int x){//寻找父亲节点
if(fa[x]==x) return x;
else return fa[x]=Find(fa[x]);
}
void Union(int x,int y){
int s=Find(x),t=Find(y);
if(s==t) e[s]++;//合并的时候加边
else{
fa[s]=t;
e[t]=e[s]+e[t]+1;//注意要加1
sz[t]=sz[s]+sz[t];//大小
}
}
ll Wanquan(ll x){//完全图的点数
return x*(x-1)/2;
}
int n,q;ll ans;
int main(){
scanf("%d %d",&n,&q);
rep(i,1,n){
fa[i]=i;
sz[i]=1;//初始化的时候点数为1,边数为0
}
while(q--){
int x,y;
scanf("%d %d",&x,&y);
Union(x,y);
}
rep(i,1,n){
if(fa[i]==i)
ans+=(Wanquan(sz[i])-e[i]);//如题
}
printf("%lld",ans);
return 0;
}
/* Problem: 新朋友
Language: C++ Result: 正确 Time: 2026-08-25 15:39:22
User: admin Problem: 5059 contest_id: 0*/
#include<iostream>
using namespace std;
int n,q,ans=0,a[1010];
int main(){
cin>>n>>q;
for(int i=1;i<=q;i++){
int x;cin>>x;
a[x]^=1;
}
for(int i=1;i<=n;i++){
if(a[i]) ans++; //统计没有牙齿的位置数量
}
cout<<n-ans; //有牙齿的数量=总数-没有牙齿的数量
return 0;
}
/* Problem: 治疗牙齿
Language: C++ Result: 正确 Time: 2026-08-25 11:51:30
User: admin Problem: 5057 contest_id: 0*/
#include<iostream>
using namespace std;
string s;
int x=0;
int main(){
cin>>s;
x=s[3]-'0';
x=x*10+s[4]-'0';
x=x*10+s[5]-'0';
if(x>=1&&x<=349) cout<<"Yes";
else cout<<"No";
return 0;
}
/* Problem: 比赛是否结束
Language: C++ Result: 正确 Time: 2026-08-25 11:42:58
User: admin Problem: 5056 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
long long a[3][3];int n[3][3];
bool dfs(long long x,long long y,int d,int k){
if(d++==9)return x>y;
bool t=1;
for(int i=0;i<3&&t;i++)for(int j=0;j<3&&t;j++)if(!n[i][j]){
n[i][j]=k;
if(n[i][0]==k&&n[i][1]==k&&n[i][2]==k){
n[i][j]=0;return 1;
}
if(n[0][j]==k&&n[1][j]==k&&n[2][j]==k){
n[i][j]=0;return 1;
}
if(i==j&&n[0][0]==k&&n[1][1]==k&&n[2][2]==k){
n[i][j]=0;return 1;
}
if(i+j==2&&n[0][2]==k&&n[1][1]==k&&n[2][0]==k){
n[i][j]=0;return 1;
}
t=t&&dfs(y,x+a[i][j],d,-k);
n[i][j]=0;
}
return !t;
}
int main(){
for(int i=0;i<3;i++)for(int j=0;j<3;j++)scanf("%lld",&a[i][j]);
puts(dfs(0,0,0,1)?"Takahashi":"Aoki");
return 0;
}
/* Problem: 博弈
Language: C++ Result: 正确 Time: 2026-08-25 11:21:23
User: admin Problem: 5053 contest_id: 0*/
#include <bits/stdc++.h>
#define int long long
using namespace std;
int l, r;
signed main() {
cin >> l >> r;
int now = l, num = 0;
queue<pair<int,int>>ans;
while (now < r) {
int i = 0;
do { // 枚举 i 值
int pow = (1LL << i);
// 判断合法性
if (now % pow != 0) break;
if (pow * ((now / pow) + 1) > r) break;
} while (++i);
i--, num++;
int pow = (1LL << i);
int j = now / pow;
ans.emplace(pow * j, pow * (j + 1));
now = pow * (j + 1);
}
cout << num << endl;
while (!ans.empty()) {
cout << ans.front().first << " " << ans.front().second << endl;
ans.pop();
}
return 0;
}
/* Problem: 最小分割
Language: C++ Result: 正确 Time: 2026-08-25 11:12:44
User: admin Problem: 5052 contest_id: 0*/
#include<iostream>
#include<cstdio>
using namespace std;
string s,t;
int n,p=0;
bool flag;
int main(){
cin>>s>>t;
n=s.size();
for(int i=0;i<n;i++) s[i]+='A'-'a';
if(t[2]=='X'){
for(int i=0;i<n;i++){
if(p<=1&&s[i]==t[p]) p++;
}
if(p>1) flag=true;
}
p=0;
for(int i=0;i<n;i++){
if(p<=2&&s[i]==t[p]) p++;
}
if(p>2) flag=true;
flag?printf("Yes"):printf("No");
return 0;
}
/* Problem: 机场代码
Language: C++ Result: 正确 Time: 2026-08-25 11:03:17
User: admin Problem: 5051 contest_id: 0*/
#include<iostream>
using namespace std;
string s;
int v[300],a[110],ans=0;
int main(){
cin>>s;
for(int i=0;i<s.size();i++)
v[s[i]]++;
for(int i=97;i<=122;i++)
a[v[i]]++;
for(int i=1;i<=100;i++)
if(a[i]!=0&&a[i]!=2){//出现i次的字符种类不符合要求
cout<<"No";
return 0;
}
cout<<"Yes"; //出现i次的字符种类恰好0种或2种
return 0;
}
/* Problem: 好字符串
Language: C++ Result: 正确 Time: 2026-08-25 11:00:11
User: admin Problem: 5050 contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[110];//a[i]表示1~i的字符串的最长长度,即长度的前缀最大值
string s[110];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i];
a[i]=max((int)s[i].size(),a[i-1]); //长度的前缀最大值
}
for(int i=1;i<=n;i++){ //为长度不够的字符串补充*
for(int j=s[i].size();j<a[i];j++){
s[i]+='*'; //在末尾补充*
}
}
for(int i=0;i<a[n];i++){ //从第0列开始输出
for(int j=n;j>=1;j--){ //从输入的最后1个字符串开始输出
if(s[j].size()<=i) break; //字符串的长度不够,则不需要输出了
cout<<s[j][i];
}
cout<<endl;
}
return 0;
}
/* Problem: 文本竖排
Language: C++ Result: 正确 Time: 2026-08-24 21:26:56
User: admin Problem: 5032 contest_id: 0*/
#include<iostream>
#include<cmath>
using namespace std;
int a[300],ans=0;
string s;
int main(){
cin>>s;
for(int i=0;i<s.size();i++){
a[s[i]]=i; //数组下标计数:字符s[i]的位置是i
}
for(char i='B';i<='Z';i++){
ans+=abs(a[i]-a[i-1]); //A~B,B~C,...,Y~Z
}
cout<<ans;
return 0;
}
/* Problem: 字母按键
Language: C++ Result: 正确 Time: 2026-08-24 21:13:03
User: admin Problem: 4929 contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
int n,q,a[200010],ans=0;
long long b[200010];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
scanf("%lld",&b[i]);
b[i]=b[i-1]+b[i]; //前缀和:编号1~i的村庄人数
}
scanf("%d",&q);
while(q--){
int x,y;
scanf("%d %d",&x,&y);
int r=upper_bound(a+1,a+n+1,y)-a-1; //右边界的前一个位置
int l=lower_bound(a+1,a+n+1,x)-a; //左边界
if(r<l) printf("0\n");
else printf("%lld\n",b[r]-b[l-1]); //区间和
}
return 0;
}
/* Problem: 村民统计
Language: C++ Result: 正确 Time: 2026-08-24 16:18:09
User: admin Problem: 4945 contest_id: 0*/
#include<iostream>
#include<cmath>
using namespace std;
int n,f,z;
int main(){
cin>>n;
for(int i=1;i<n;i++){
int x;cin>>x;
if(x<0) f+=x; //负数
else z+=x; //正数
}
if(z>-f) cout<<-abs(z+f);
else cout<<abs(z+f);
return 0;
}
/* Problem: 得分
Language: C++ Result: 正确 Time: 2026-08-24 10:34:36
User: admin Problem: 5049 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+7;
const long long inf=1e20+7;
int N;
long long f[maxn],dep[maxn],sz[maxn],ALL,coin[maxn];
int head[maxn<<1],nxt[maxn<<1],to[maxn<<1],cnt_edge;
void AddEdge(int u,int v)
{nxt[++cnt_edge]=head[u];to[cnt_edge]=v;head[u]=cnt_edge;}
void dfs(int u,int fa,long long dep){
f[1]+=coin[u]*dep;sz[u]=coin[u];
for(int i=head[u];i;i=nxt[i]){
int v=to[i];if(v==fa)continue;
dfs(v,u,dep+1);sz[u]+=sz[v];
}
}
void solve(int u,int fa,long long ans){
f[u]=ans;
for(int i=head[u];i;i=nxt[i]){
int v=to[i];if(v==fa)continue;
long long dans=ans;
dans-=sz[v];dans+=ALL-sz[v];//递推计算,你没看错,就这么简单。
solve(v,u,dans);
}
}
int main(){
scanf("%d",&N);
for(int i=1;i<N;i++)
{int a,b;scanf("%d %d",&a,&b);AddEdge(a,b);AddEdge(b,a);}
for(int i=1;i<=N;i++)scanf("%lld",&coin[i]),ALL+=coin[i];
dfs(1,0,0);solve(1,0,f[1]);
f[0]=inf;for(int i=1;i<=N;i++)f[0]=min(f[0],f[i]);
printf("%lld",f[0]);
return 0;
}
/* Problem: 最小和
Language: C++ Result: 正确 Time: 2026-08-24 10:24:21
User: admin Problem: 5048 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int n,m,t,fx,fy,sx,sy,dx[4]={0,0,1,-1},dy[4]={1,-1,0,0},a[205][205],b[205][205],dis[205][205];
struct node{
int x,y,val;
const bool operator<(const node &x)const{return val<x.val;}
};
void bfs(){
priority_queue<node>q;//使用优先队列将剩余能量较大的排在前面进行优化
memset(dis,-0x3f,sizeof dis);//初始化
dis[sx][sy]=max(b[sx][sy],0);//初始化
q.push({sx,sy,dis[sx][sy]});//起点入队
while(q.size()){
auto[x,y,val]=q.top();//出队
q.pop();
if(x==fx&&y==fy){
cout << "Yes" << endl;//如果走到终点就结束
return;
}
if(!val)continue;//如果没能量了就舍去
if(val<dis[x][y])continue;//如果走到的格子记录的能量比现在的大就舍去
for(int i=0;i<4;++i){
int xx=x+dx[i],yy=y+dy[i];
if(xx<1||xx>n||yy<1||yy>m||!a[xx][yy])continue;//判出图以及障碍
int v=b[xx][yy]?max(b[xx][yy],val-1):val-1;//是否喝药
if(v>dis[xx][yy]){
//剩余能量比当前格子记录的大,更新记录的能量并入队
q.push({xx,yy,v});
dis[xx][yy]=v;
}
}
}
cout << "No" << endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n >> m;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
char c;
cin >> c;
//标记地图
a[i][j]=1;
if(c=='S')sx=i,sy=j;
if(c=='T')fx=i,fy=j;
if(c=='#')a[i][j]=0;
}
}
cin >> t;
//标记药水
for(int x,y,z;t--;){
cin >> x >> y >> z;
b[x][y]=z;
}
bfs();
return 0;
}
/* Problem: 走格子
Language: C++ Result: 正确 Time: 2026-08-24 10:18:36
User: admin Problem: 5047 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct node {
int a, c;
}b[200010];
map<int, int> m;
signed main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> b[i].a >> b[i].c;
if (m[b[i].c] == 0)
m[b[i].c] = b[i].a;
else
m[b[i].c] = min(m[b[i].c], b[i].a);
}
int ans = -1e9;
for (int i = 1; i <= n ;i ++){
ans = max(m[b[i].c], ans);
}
cout << ans;
return 0;
}
/* Problem: 彩豆
Language: C++ Result: 正确 Time: 2026-08-24 10:11:00
User: admin Problem: 5046 contest_id: 0*/
#include<iostream>
using namespace std;
int n;
pair<int,int> p[110];
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>p[i].first>>p[i].second;
for(int i=1;i<=n;i++){
int mx=0,ans;
for(int j=1;j<=n;j++){
if((p[i].first-p[j].first)*(p[i].first-p[j].first)+(p[i].second-p[j].second)*(p[i].second-p[j].second)>mx){
mx=(p[i].first-p[j].first)*(p[i].first-p[j].first)+(p[i].second-p[j].second)*(p[i].second-p[j].second);
ans=j; //更新答案编号
}
}
cout<<ans<<endl;
}
return 0;
}
/* Problem: 最远的点
Language: C++ Result: 正确 Time: 2026-08-24 10:07:23
User: admin Problem: 5045 contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
if(i%3==0) cout<<'x'; //3的倍数位置
else cout<<'o';
}
return 0;
}
/* Problem: 罚球
Language: C++ Result: 正确 Time: 2026-08-24 09:54:24
User: admin Problem: 5044 contest_id: 0*/
#include <iostream>
using namespace std;
const int N = 3e5;
int n, edge[N], mark[N], vis[N], ans[N];
/* 从每个点开始 dfs:
edge 存边;mark 标记,每次 dfs 用不同颜色;
vis 记录每次 dfs 到达点的时间,用于快速计算环的大小;
ans 记录贡献。*/
int dfs(int s, int c, int d) {
if (mark[s]) { // s 被标记过
if (mark[s] == c) {
// 如果是本轮 dfs 标记的,则找到一个环
ans[s] = d - vis[s];
return s;
} // 若不是本轮标记的,则先前一定处理过了
return -1;
}
mark[s] = c, vis[s] = d; // 标记并记录时间
int e = dfs(edge[s], c, d + 1);
if (e == -1) ans[s] = ans[edge[s]] + 1; // 上一个点不在环里
else if (e == s) return -1; // 到达环的终点
else ans[s] = ans[edge[s]]; // 两个点都在环里
return e;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n;
for (int i = 1; i <= n; ++i) cin >> edge[i];
long long sum = 0;
for (int i = 1; i <= n; ++i) {
dfs(i, i, 1);
sum += ans[i];
}
cout << sum << "\n";
return 0;
}
/* Problem: 可到达顶点数
Language: C++ Result: 正确 Time: 2026-08-23 21:05:19
User: admin Problem: 5101 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
ll qkpow(__int128 pos){
ll ans=1,num=10;
while(pos){
if(pos%2==1) ans=1ll*ans*num%mod;
num=1ll*num*num%mod; pos=pos/2;
}
return ans;
}
int main(){
ll n;scanf("%lld",&n);
ll m=n; int cnt=0;
while(m) cnt++,m/=10;
ll p=n%mod,q=n,ans=0;
__int128 pos=cnt;
while(q){
if(q%2==1){
ans=1ll*ans*qkpow(pos)%mod;
ans=(ans+p)%mod;
}
p=(1ll*p*qkpow(pos)%mod+p)%mod;
q=q/2; pos=pos*2;
}
printf("%lld\n",ans);
return 0;
}
/* Problem: 连接N次
Language: C++ Result: 正确 Time: 2026-08-23 21:00:53
User: admin Problem: 5100 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int x;
char s[2005][2005];
void fill(int x, int y, int k) {
if (k == 0) return s[x][y] = 1, void();
int t = k / 3;
fill(x, y, t);
fill(x + t, y, t);
fill(x + t * 2, y, t);
fill(x, y + t, t);
fill(x, y + t * 2, t);
fill(x + t, y + t * 2, t);
fill(x + t * 2, y + t, t);
fill(x + t * 2, y + t * 2, t);
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
cin >> x;
if (x == 0) return cout << "#", 0;
int t = pow(3, x);
fill(1, 1, t);
for (int i = 1; i <= t; i++) {
for (int j = 1; j <= t; j++) cout << (s[i][j] == 0 ? '.' : '#');
cout << '\n';
}
return 0;
}
/* Problem: N级地毯
Language: C++ Result: 正确 Time: 2026-08-23 20:55:54
User: admin Problem: 5099 contest_id: 0*/
#include<iostream>
using namespace std;
int d,x;
string s;
int main(){
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]>='a') x++;
else d++;
}
if(d>x){//全部转大写
for(int i=0;i<s.size();i++){
if(s[i]>='a') s[i]-=32;
}
}else{//全部转小写
for(int i=0;i<s.size();i++){
if(s[i]<='Z') s[i]+=32;
}
}
cout<<s;
return 0;
}
/* Problem: 大小写转换
Language: C++ Result: 正确 Time: 2026-08-23 20:49:27
User: admin Problem: 5098 contest_id: 0*/
#include<iostream>
using namespace std;
int n,m,x,ans=0;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>x;
if(x<=m){
ans++; //统计数量
}
m-=x;
}
cout<<ans;
return 0;
}
/* Problem: 消毒
Language: C++ Result: 正确 Time: 2026-08-23 20:44:09
User: admin Problem: 5097 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
int main(){
long long t;
scanf("%lld",&t);
while(t--){
long long n,m;
scanf("%lld%lld",&n,&m);
__int128 N=n,M=m;
__int128 sum=0,x=1;
__int128 zeroinint128=0;
for(int i=1;i<=20;++i){
sum=(sum+n/(m/__gcd(M,10*x-1))*max(zeroinint128,min(n-x+1,9*x)))%998244353;
x*=10;
}
printf("%lld\n",(long long)sum%998244353);
}
return 0;
}
/* Problem: x+y
Language: C++ Result: 正确 Time: 2026-08-23 17:47:32
User: admin Problem: 5131 contest_id: 0*/
#include<iostream>
#include<vector>
#include<queue>
#define LL long long
#define F(i,k,n) for(int i=k;i<=n;++i)
#define RF(i,k,n) for(int i=k;i>=n;--i)
using namespace std;
vector<vector<bool>>v;
vector<vector<bool>>us;
vector<vector<int>>ans;
int a[8]={1,1,1,0,0,-1,-1,-1};
int b[8]={1,0,-1,1,-1,1,0,-1};
struct node{
int x;
int y;
int step;
};
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n,m;
cin>>n>>m;
v.resize(n+1);
ans.resize(n+1);
us.resize(n+1);
queue<node>q;
F(i,1,n){
v[i].resize(m+1);
ans[i].resize(m+1);
us[i].resize(m+1);
string s;
cin>>s;
F(j,1,m){
ans[i][j]=-1;
v[i][j]=(s[j-1]=='#');
}
}
F(i,1,n){
F(j,1,m){
if(v[i][j]==0)
continue;
bool bl=0;
F(k,0,7){
int nx=i+a[k];
int ny=j+b[k];
if(nx<=0||ny<=0||nx>n||ny>m){
continue;
}
if(v[nx][ny]==0){
bl=1;
break;
}
}
if(bl==0)
us[i][j]=1;
}
}
F(i,1,n){
F(j,1,m){
if(us[i][j])
v[i][j]=0;
if(v[i][j]){
ans[i][j]=0;
q.push({i,j,0});
}
}
}
while(!q.empty()){
int x=q.front().x;
int y=q.front().y;
int step=q.front().step;
q.pop();
F(i,0,7){
int nx=x+a[i];
int ny=y+b[i];
if(nx<=0||ny<=0||nx>n||ny>m||ans[nx][ny]!=-1){
continue;
}
node pt;
pt.x=nx;
pt.y=ny;
pt.step=step+1;
ans[nx][ny]=step+1;
q.push(pt);
}
}
F(i,1,n){
F(j,1,m){
if(ans[i][j]&1){
cout<<'.';
}else{
cout<<'#';
}
}
cout<<'\n';
}
return 0;
}
/* Problem: 反复重涂
Language: C++ Result: 正确 Time: 2026-08-23 17:43:53
User: admin Problem: 5130 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
const int N=200002;
int n,m,a[N],b[N],l=1,r=1,ans;
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++)cin>>b[i];
sort(a+1,a+n+1),sort(b+1,b+m+1);
while(l<=n&&r<=m)
{
if(a[l]*2>=b[r])l++,r++,ans++;
else l++;
}
cout<<ans;
return 0;
}
/* Problem: 寿司
Language: C++ Result: 正确 Time: 2026-08-23 17:36:24
User: admin Problem: 5129 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
long long x1, y1, r1, x2, y2, r2;
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
// 计算中心距离的平方
long long dx = x1 - x2;
long long dy = y1 - y2;
long long d_sq = dx * dx + dy * dy;
// 计算半径和、差的平方
long long r_sum = r1 + r2;
long long r_diff = abs(r1 - r2);
// 判断是否有公共点:|R1-R2|^2 <= d^2 <= (R1+R2)^2
if (r_diff * r_diff <= d_sq && d_sq <= r_sum * r_sum) {
cout << "Yes\n";
} else {
cout << "No\n";
}
}
return 0;
}
/* Problem: 两圆相交
Language: C++ Result: 正确 Time: 2026-08-23 17:33:16
User: admin Problem: 5128 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
int cnt = 0;
while (m > 0) {
m = n % m;
cnt++;
}
cout << cnt << "\n";
return 0;
}
/* Problem: 循环模运算
Language: C++ Result: 正确 Time: 2026-08-23 17:29:13
User: admin Problem: 5127 contest_id: 0*/
#include<bits/stdc++.h>
#define LL long long
#define UInt unsigned int
#define ULL unsigned long long
#define LD long double
#define pii pair<int,int>
#define pLL pair<LL,LL>
#define pDD pair<LD,LD>
#define fr first
#define se second
#define pb push_back
#define isr insert
#define _i128 __int128
using namespace std;
const int N = 1e6+5;
const LL MOD = 998244353;
LL n,Fa[N],c[N],d[N],maxd;
LL jc[N],inv[N];
LL sc[N],sd[N],dp[N];
vector<int> g[N];
LL read(){
LL su=0,pp=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')pp=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){su=su*10+ch-'0';ch=getchar();}
return su*pp;
}
LL QP(LL x,LL y=MOD-2){
LL as=1;
while(y){
if(y&1)as=as*x%MOD;
x=x*x%MOD,y>>=1;
}return as;
}
LL sum_mul(LL x,LL y){
_i128 as=1;
for(LL i=x;i<=y;i++)
as=as*(_i128)(i)%MOD;
return (LL)(as);
}
void DFS_sum(int u){
sc[u]=c[u],sd[u]=d[u];
for(int v:g[u])
DFS_sum(v),sc[u]+=sc[v],sd[u]+=sd[v];
return;
}
void DFS_dp(int u){
LL init=sum_mul(sc[u]-sd[u]+1,sc[u]-sd[u]+d[u]);
init=init*inv[d[u]]%MOD;
dp[u]=init;
for(int v:g[u])DFS_dp(v),dp[u]=dp[u]*dp[v]%MOD;
return;
}
int main(){
n=read();
for(int i=2;i<=n;i++)
Fa[i]=read(),g[Fa[i]].pb(i);
for(int i=1;i<=n;i++)c[i]=read();
for(int i=1;i<=n;i++)
d[i]=read(),maxd=max(maxd,d[i]);
jc[0]=1,inv[0]=1;
for(LL i=1;i<=maxd;i++)
jc[i]=jc[i-1]*i%MOD;
inv[maxd]=QP(jc[maxd]);
for(LL i=maxd-1;i>=1;i--)
inv[i]=inv[i+1]*(i+1)%MOD;
DFS_sum(1),DFS_dp(1);
cout<<dp[1]<<"\n";
return 0;
}
/* Problem: 糖果
Language: C++ Result: 正确 Time: 2026-08-23 17:24:30
User: admin Problem: 5126 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, q;
cin >> n >> q;
vector<int> blocks(n + 1, 0); // 每个格子的放置次数(累计放置了多少次)
map<int, int> cnt; // 记录每种【放置次数】对应的格子数量(注意:不是真实方块数)
cnt[0] = n; // 初始所有格子的放置次数都是0
int base = 0; // 整体移除的次数(所有格子同时移除了多少次)
while (q--) {
int type;
cin >> type;
if (type == 1) {
int x;
cin >> x;
// 更新计数
cnt[blocks[x]]--;
if (cnt[blocks[x]] == 0) cnt.erase(blocks[x]);
blocks[x]++;
cnt[blocks[x]]++;
// 检查是否所有格子都有方块(即没有格子的放置次数等于base)
if (cnt.find(base) == cnt.end()) {//if(cnt.count(base) == 0) {
// 所有格子都有方块,触发整体移除
base++;
}
} else {
int y;
cin >> y;
// 统计 blocks[i] - base >= y 的格子数
int ans = 0;
for (auto& p : cnt) {
if (p.first - base >= y) ans += p.second;
}
cout << ans << "\n";
}
}
return 0;
}
/* Problem: 方块掉落
Language: C++ Result: 正确 Time: 2026-08-23 17:12:35
User: admin Problem: 5124 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,q,k,cnt[300005],sum[300005];
signed main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>q;
sum[0]=n;
for (int i=1;i<=q;i++) {
int op;
cin>>op;
if (op==1) {
int x;
cin>>x;
cnt[x]++;
sum[cnt[x]]++;
if (sum[k+1]==n) k++;
} else {
int y;
cin>>y;
int tar=y+k;
if (tar>q) cout<<"0\n";
else cout<<sum[tar]<<'\n';
}
}
return 0;
}
/* Problem: 方块掉落
Language: C++ Result: 正确 Time: 2026-08-23 17:10:31
User: admin Problem: 5124 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
// 手机键盘字母到数字的映射
// abc -> 2, def -> 3, ghi -> 4, jkl -> 5, mno -> 6, pqrs -> 7, tuv -> 8, wxyz -> 9
string mapping = "22233344455566677778889999";
// mapping[0] = '2' 对应 'a', mapping[25] = '9' 对应 'z'
string result = "";
for (int i = 0; i < n; i++) {
string s;
cin >> s;
char first = s[0];
// 根据首字母映射到数字
result += mapping[first - 'a'];
}
cout << result << endl;
return 0;
}
/* Problem: 459
Language: C++ Result: 正确 Time: 2026-08-23 17:05:27
User: admin Problem: 5123 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int x;
cin >> x;
string s = "HelloWorld";
// 输出除第x个字符外的所有字符(下标从0开始,第x个字符下标为x-1)
for (int i = 0; i < s.size(); i++) {
if (i != x - 1) {
cout << s[i];
}
}
cout << endl;
return 0;
}
/* Problem: Hell, World!
Language: C++ Result: 正确 Time: 2026-08-23 16:59:50
User: admin Problem: 5122 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353;
int jc[3000005];
int inv[3000005];
int X1,X2,X3;
inline int ksm(int a,int x){
int res=1;
while (x){
if (x&1){
res=res*a%mod;
}
a=a*a%mod;
x>>=1;
}
return res;
}
inline int C(int n,int m){
if (m<0 || m>n) return 0;
return jc[n]*inv[m]%mod*inv[n-m]%mod;
}
signed main(){
cin>>X1>>X2>>X3;
int maxn=X1+X2+X3+5;
jc[0]=1;
for (int i=1;i<=maxn;i++){
jc[i]=jc[i-1]*i%mod;
}
inv[maxn]=ksm(jc[maxn],mod-2);
for (int i=maxn;i>=1;i--){
inv[i-1]=inv[i]*i%mod;
}
int ans=0;
int lim=min(X1,min(X3,X2+1));
for (int k=0;k<=lim;k++){
int w=C(X2+1,k)*C(X1+X2-k,X1-k)%mod*C(X3+X2-k,X3-k)%mod;
if (k&1){
ans=(ans-w+mod)%mod;
}
else{
ans=(ans+w)%mod;
}
}
cout<<ans;
return 0;
}
/* Problem: 计数123
Language: C++ Result: 正确 Time: 2026-08-23 16:48:17
User: admin Problem: 5121 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
int X,Q,A,B,i;
priority_queue<int>maxn;
priority_queue<int,vector<int>,greater<int>>minn;
int main(){
scanf("%d %d",&X,&Q);
maxn.push(X);
for(;i<Q;i++){
scanf("%d %d",&A,&B);
if(A<=maxn.top())
maxn.push(A);
else
minn.push(A);
if(maxn.size()-2==minn.size()){
minn.push(maxn.top());
maxn.pop();
}
if(B<=maxn.top())
maxn.push(B);
else
minn.push(B);
if(maxn.size()+1==minn.size()){
maxn.push(minn.top());
minn.pop();
}
printf("%d\n",maxn.top());
}
return 0;
}
/* Problem: 黑板中位数
Language: C++ Result: 正确 Time: 2026-08-23 16:44:56
User: admin Problem: 5120 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main () {
string s;
long long cnt = 0; // 见祖宗警告
cin >> s;
for (int i = 0; i < s.size(); i ++) {
if (s[i] == 'C') {
int len = s.size ();
cnt += min (i - 0 + 1, len - i); // 加上以该位为中心的符合标准的子串个数
//cout << i << ' ' << min (i - 0 + 1, len - i) << endl;
}
}
cout << cnt;
return 0;
}
/* Problem: 中心
Language: C++ Result: 正确 Time: 2026-08-23 16:39:09
User: admin Problem: 5119 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int H, W;
cin >> H >> W;
// 方向数组:上下左右
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
for (int i = 1; i <= H; i++) {
for (int j = 1; j <= W; j++) {
int cnt = 0;
// 检查四个方向
for (int k = 0; k < 4; k++) {
int ni = i + dx[k];
int nj = j + dy[k];
// 判断是否在网格范围内
if (ni >= 1 && ni <= H && nj >= 1 && nj <= W) {
cnt++;
}
}
cout << cnt << (j == W ? "" : " ");
}
cout << "\n";
}
return 0;
}
/* Problem: 相邻格子
Language: C++ Result: 正确 Time: 2026-08-23 16:36:06
User: admin Problem: 5118 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main() {
string S;
int N;
cin >> S >> N;
// 从位置N开始,取长度为S.length()-2*N的子串
cout << S.substr(N, S.length() - 2 * N) << endl;
return 0;
}
/* Problem: 截取字符串
Language: C++ Result: 正确 Time: 2026-08-23 16:32:17
User: admin Problem: 5117 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define lowbit(x) ((x)&(-(x)))
const int N=3e5+10,mod=998244353;
vector<int>ll[N],rr[N];
map<pair<int,int>,bool>px;
vector<pair<int,int>>vec;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int l,r;
cin>>l>>r;
vec.push_back({l,r});
ll[l].push_back(r);
rr[r].push_back(l);
}
sort(vec.begin(),vec.end(),greater<pair<int,int>>());
int mn=1e18;
for(auto v:vec)
{
if(v.se>=mn) px[v]=1;
mn=min(mn,v.se);
}
for(int i=1;i<=n;i++)
{
sort(ll[i].begin(),ll[i].end());
sort(rr[i].begin(),rr[i].end());
}
int q;
cin>>q;
while(q--)
{
int l,r;
cin>>l>>r;
if(!rr[r].size()||!ll[l].size())
{
cout<<"No\n";
continue;
}
auto itl=lower_bound(rr[r].begin(),rr[r].end(),l);
if(itl==rr[r].end())
{
cout<<"No\n";
continue;
}
int tl=*itl;
if(tl==l&&px[{l,r}])
{
cout<<"Yes\n";
continue;
}
int fl=lower_bound(ll[l].begin(),ll[l].end(),tl-1)-ll[l].begin(),fr=lower_bound(ll[l].begin(),ll[l].end(),r+1)-ll[l].begin()-1;
if(fl>fr||(fl==fr&&tl==l&&ll[l][fl]==r)) cout<<"No\n";
else cout<<"Yes\n";
}
return 0;
}
/* Problem: 交叉桌布
Language: C++ Result: 正确 Time: 2026-08-23 16:28:51
User: admin Problem: 5116 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int N;
long long K;
vector<long long> A;
bool check(long long x) {
long long ops = 0;
for (int i = 1; i <= N; i++) {
if (A[i] < x) {
long long diff = x - A[i];
long long t = (diff + i - 1) / i;
ops += t;
if (ops > K) return false;
}
}
return ops <= K;
}
int main() {
cin >> N >> K;
A.resize(N + 1);
long long min_val = 2e18, max_val = 0;
for (int i = 1; i <= N; i++) {
cin >> A[i];
min_val = min(min_val, A[i]);
max_val = max(max_val, A[i]);
}
// 二分答案
long long left = min_val, right = max_val + K;
long long ans = min_val;
while (left <= right) {
long long mid = left + (right - left) / 2;
if (check(mid)) {
ans = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
cout << ans << endl;
return 0;
}
/* Problem: 提升最小值
Language: C++ Result: 正确 Time: 2026-08-23 16:22:21
User: admin Problem: 5115 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
long long n,k,l[200001],c,now;//不开long long见祖宗
map<long long,map<long long,long long> >a;//因为开数组会导致MLE,所以我使用map完成
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>l[i];
for(int j=1;j<=l[i];j++)
cin>>a[i][j];
}
for(int i=1;i<=n;i++){
cin>>c;
now+=c*l[i];//拼接增加长度
if(k>now)//如果长度过短则直接跳到下一层循环
continue;
cout<<((k-(now-c*l[i]))%l[i]==0?a[i][l[i]]:a[i][(k-(now-c*l[i]))%l[i]])<<endl;//长度足够,输出答案
break;
}
return 0;
}
/* Problem: 长序列
Language: C++ Result: 正确 Time: 2026-08-23 10:23:24
User: admin Problem: 5114 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int N;
cin >> N;
// 使用 vector 存储 N 个序列,下标从 1 开始
vector<vector<int>> A(N + 1);
for (int i = 1; i <= N; ++i) {
int L;
cin >> L;
A[i].resize(L + 1); // 下标从 1 开始
for (int j = 1; j <= L; ++j) {
cin >> A[i][j];
}
}
int X, Y;
cin >> X >> Y;
// 输出第 X 个序列的第 Y 个元素
cout << A[X][Y] << endl;
return 0;
}
/* Problem: 多维数组
Language: C++ Result: 正确 Time: 2026-08-23 10:13:52
User: admin Problem: 5113 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int N;
cin >> N;
vector<int> A(N);
for (int i = 0; i < N; ++i) {
cin >> A[i];
}
int X;
cin >> X;
// 输出第X个元素(题目索引从1开始,数组从0开始)
cout << A[X - 1] << endl;
return 0;
}
/* Problem: 数组
Language: C++ Result: 正确 Time: 2026-08-23 10:07:15
User: admin Problem: 5112 contest_id: 0*/
#include"bits/stdc++.h"
const int N = 1e5 + 5;
int n,m,w;
std::set<std::pair<int,int> > se;
bool vis[11][N];
bool memo[11][N];
bool dp[11][N];
std::vector<int> g[N];
std::string s[N];
bool f(int day,int u){
if (memo[day][u]) return dp[day][u];
if (vis[day][u]) return dp[day][u] = 1;
vis[day][u] = 1;
se.insert({day,u});
int tomm = (day + 1) > w ? day + 1 - w : day + 1;
if (s[u][tomm - 1] == 'o')
if (f(tomm,u)) return memo[day][u] = 1,dp[day][u] = 1;
for (int v : g[u])
if (s[v][tomm - 1] == 'o')
if (f(tomm,v)) return memo[day][u] = 1,dp[day][u] = 1;
return memo[day][u] = 1,dp[day][u] = 0;
}
int main(){
std::cin.tie(0)->sync_with_stdio(0);
int T;
for (std::cin >> T;T--;){
std::cin >> n >> m;
for (int i = 1;i <= n;i++) g[i].clear();
for (int i = 1;i <= m;i++){
int u,v;std::cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
std::cin >> w;
for (int i = 1;i <= w;i++) std::fill(memo[i] + 1,memo[i] + 1 + n,0);
for (int i = 1;i <= n;i++) std::cin >> s[i];
bool find = 0;
for (int i = 1;i <= n;i++){
se.clear();
if (s[i][0] == 'o' && f(1,i)){
for (auto p : se) vis[p.first][p.second] = 0;
std::cout << "Yes\n";
find = 1;
break;
}
for (auto p : se) vis[p.first][p.second] = 0;
}
if (!find) std::cout << "No\n";
}
return 0;
}
/* Problem: 休息日旅行
Language: C++ Result: 正确 Time: 2026-08-23 10:03:17
User: admin Problem: 5111 contest_id: 0*/
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 998244353;
int dp[3];
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
string s;
cin >> s;
for (const char& c : s) {
int x = c - 'a';
(dp[x] += (dp[(x + 1) % 3] + dp[(x + 2) % 3] + 1) % mod) %= mod;
}
cout << (dp[0] + dp[1] + dp[2]) % mod;
return 0;
}
/* Problem: 子序列个数
Language: C++ Result: 正确 Time: 2026-08-23 09:57:21
User: admin Problem: 5110 contest_id: 0*/
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 998244353;
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
string s;
cin >> s;
int n = (int)s.size();
int cnt = 1, ans = 1;
for (int i = 1; i < n; i++) {
if (s[i] != s[i - 1]) (cnt += 1) %= mod;
else cnt = 1;
(ans += cnt) %= mod;
}
cout << ans;
return 0;
}
/* Problem: 不相邻
Language: C++ Result: 正确 Time: 2026-08-23 09:52:51
User: admin Problem: 5109 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int a[3][6];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 6; j++) {
cin >> a[i][j];
}
}
// 统计每个骰子上 4, 5, 6 各出现几次
int cnt[3][3] = {}; // cnt[i][v] 表示第 i 个骰子上数字 (v+4) 出现的次数
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 6; j++) {
if (a[i][j] >= 4 && a[i][j] <= 6) {
cnt[i][a[i][j] - 4]++;
}
}
}
// 枚举 4, 5, 6 分配给 3 个骰子的排列
// perm[0] 表示骰子0出的数字(0=4, 1=5, 2=6)
int perm[] = {0, 1, 2};
double ans = 0;
do {
double prob = 1.0;
for (int i = 0; i < 3; i++) {
prob *= cnt[i][perm[i]] / 6.0;
}
ans += prob;
} while (next_permutation(perm, perm + 3));
cout << fixed << setprecision(10) << ans << '\n';
return 0;
}
/* Problem: 骰子
Language: C++ Result: 正确 Time: 2026-08-23 09:47:57
User: admin Problem: 5108 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int x;
cin >> x;
if (x >= 3 && x <= 18) {
cout << "Yes\n";
} else {
cout << "No\n";
}
return 0;
}
/* Problem: ABC
Language: C++ Result: 正确 Time: 2026-08-23 09:39:24
User: admin Problem: 5107 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
void solve();
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T = 1;
// cin >> T;
while (T--) solve();
return 0;
}
void solve() {
int n, q;
cin >> n >> q;
vector<int> dn(n+1, 0), up(n+1, 0), ans(n+1, 0);
while (q--) {
int x, y;
cin >> x >> y;
int k = dn[x];
if (k != 0) up[k] = 0;
dn[x] = y;
up[y] = x;
}
for (int i = 1; i <= n; i++) {
if (dn[i] != 0) continue;
int cnt2 = 0;
int cnt1 = i;
while (cnt1 != 0) {
cnt2++;
cnt1 = up[cnt1];
}
ans[i] = cnt2;
}
for (int i = 1; i <= n; i++) cout << ans[i] << " ";
}
/* Problem: 叠卡片
Language: C++ Result: 正确 Time: 2026-08-22 21:04:00
User: admin Problem: 5105 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define fastio ios::sync_with_stdio(0);cin.tie(0),cout.tie(0)
#define endl "\n"
const int N=3e5+5;
int n,q,nxt[N],pre[N];
bool isroot[N];
int siz(int u){
if(u==-1) return 0;
return siz(nxt[u])+1;
}
int main(){
fastio;
cin>>n>>q;
for(int i=1;i<=n;i++){
nxt[i]=-1;
isroot[i]=true;
}
while(q--){
int c,p;
cin>>c>>p;
nxt[p]=c;
nxt[pre[c]]=-1;
pre[c]=p;
isroot[c]=false;
}
for(int i=1;i<=n;i++){
if(isroot[i]){
cout<<siz(i)<<" ";
}
else cout<<0<<" ";
}
return 0;
}
/* Problem: 叠卡片
Language: C++ Result: 正确 Time: 2026-08-22 21:03:22
User: admin Problem: 5105 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
map<int, int> mp;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
mp[x]++;
}
vector<long long> v;
for (auto &p : mp) {
v.push_back(1ll * p.first * p.second);
}
sort(v.begin(), v.end());
long long ans = 0;
for (int i = 0; i < max(0, (int)v.size() - k); i++) {
ans += v[i];
}
cout << ans << endl;
return 0;
}
/* Problem: 最小可能和
Language: C++ Result: 正确 Time: 2026-08-22 20:58:01
User: admin Problem: 5104 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int h, w;
cin >> h >> w;
vector<string> grid(h);
for (int i = 0; i < h; i++) {
cin >> grid[i];
}
int ans = 0;
for (int h1 = 0; h1 < h; h1++) {
for (int h2 = h1; h2 < h; h2++) {
for (int w1 = 0; w1 < w; w1++) {
for (int w2 = w1; w2 < w; w2++) {
bool ok = true;
for (int i = h1; i <= h2 && ok; i++) {
for (int j = w1; j <= w2 && ok; j++) {
int si = h1 + h2 - i;
int sj = w1 + w2 - j;
if (grid[i][j] != grid[si][sj]) {
ok = false;
}
}
}
if (ok) {
ans++;
}
}
}
}
}
cout << ans << '\n';
return 0;
}
/* Problem: 对称上色
Language: C++ Result: 正确 Time: 2026-08-22 19:05:12
User: admin Problem: 5103 contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,c;
int main(){
cin>>a>>b>>c;
if(a!=b&&b==c) cout<<"Yes";
else cout<<"No";
return 0;
}
/* Problem: ABB
Language: C++ Result: 正确 Time: 2026-08-22 18:53:16
User: admin Problem: 5102 contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,c;
int main(){
cin>>a>>b>>c;
if(a!=b&&b==c) cout<<"Yes";
else cout<<"No";
return 0;
}
/* Problem: ABB
Language: C++ Result: 正确 Time: 2026-08-22 18:50:15
User: admin Problem: 5102 contest_id: 0*/