当前位置: 首页 > news >正文

【2025.8.11】模拟赛

T1

solution

先特判买不够 \(a\) 瓶和能买无限瓶的两种情况。

接着一直买 \(a\) 瓶,直到买不够为止。

(签到题竟然挂了)

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int t;
ll n,x,a,b;
ll ans=0;
int main(){freopen("buy.in","r",stdin);freopen("buy.out","w",stdout);cin>>t;while(t--){scanf("%lld%lld%lld%lld",&n,&x,&a,&b);ans=0;if(n/x<a){printf("%lld\n",n/x);continue;}if(a*x<=b){//7 2 3 5printf("-1\n");continue;}ll tmp=(n-a*x)/(a*x-b);ans=tmp*a;n-=tmp*(a*x-b);while(n>=a*x){n-=a*x-b;ans+=a;}ans+=n/x;printf("%lld\n",ans);}fclose(stdin);fclose(stdout);return 0;
}

T2

solution

每次找相邻的三个颜色不同的点进行划分,找到后把中间的点删去,用链表维护。

特别地,如果存在只剩一个的颜色,就拿这个点往其他所有没被删去的点连对角线。

code

#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
struct node{int x,y;
}ans[N];
int n,tot=0;
char s[N];
int a[N];
int lst[N],nxt[N];
bool vis[N];
int cnt[5];
queue<int> q;
int ch(char c){if(c=='R')  return 0;if(c=='G')  return 1;if(c=='B')  return 2;
}
bool check(int idx){if(a[lst[idx]]==a[idx])  return 0;if(a[nxt[idx]]==a[idx])  return 0;if(a[lst[idx]]==a[nxt[idx]])  return 0;return 1;
}
int main(){freopen("polygon.in","r",stdin);freopen("polygon.out","w",stdout);cin>>n;cin>>s+1;for(int i=1;i<=n;++i){a[i]=ch(s[i]);cnt[a[i]]++;lst[i]=(i!=1?i-1:n);nxt[i]=(i!=n?i+1:1);}memset(vis,0,sizeof(vis));for(int i=1;i<=n;++i)if(check(i))q.push(i);while(1){if(cnt[0]==1||cnt[1]==1||cnt[2]==1){int pos=0;for(int i=1;i<=n;++i)if(!vis[i]&&cnt[a[i]]==1)pos=i;for(int i=1;i<=n;++i)if(!vis[i]&&i!=pos&&i!=lst[pos]&&i!=nxt[pos]){ans[++tot].x=i;ans[tot].y=pos;}break;}int u=q.front();q.pop();if(vis[u])  continue;if(check(u)){ans[++tot].x=lst[u];ans[tot].y=nxt[u];lst[nxt[u]]=lst[u];nxt[lst[u]]=nxt[u];vis[u]=1;cnt[a[u]]--;if(check(lst[u]))  q.push(lst[u]);if(check(nxt[u]))  q.push(nxt[u]);}}for(int i=1;i<=tot;++i)printf("%d %d\n",ans[i].x,ans[i].y);fclose(stdin);fclose(stdout);return 0;
}

T3

solution

\(kx + b\equiv ax\equiv U \pmod p\),分别用扩欧和扩展欧拉定理做,再用扩展中国剩余定理合并起来。

故最终算法为不停递归,每次 \(p\to \gcd(p,\varphi(p))\),当 \(p = 1\) 时,\(x = 1\) 总是合法解;然后倒推出最初要求的解。

\(\gcd⁡(a,p)\ne 1\) 时, 我们需要给 \(x\) 一个下界,因为拓展欧拉定理要求 \(x\ge \varphi(p)\)。只需要在解同余方程时强制要求解 \(\ge 10^9\) 即可。

时间复杂度 \(O(T\sqrt{p})\)

T4

solution

启发式合并+并查集维护。

http://www.aitangshan.cn/news/242.html

相关文章:

  • STL set、map
  • 今日总结
  • 8.10XS模拟赛
  • 企业经营分析指南:从供产销研运5大维度,用数据找准优化方向 - 智慧园区
  • 软工8.11
  • 补题祭day1
  • 2-SAT 学习报告
  • ces
  • day38
  • CSP-J 模拟1解析
  • 20250811
  • 《Effective C++》(1,2)
  • 数组
  • CSP-S模拟赛11 总结
  • CSP-S模拟赛12 总结
  • 旋转表达:blender下骨骼重映射的公式推导 bone animation retarget
  • 进度
  • 一名OIER的开始
  • springboot监听redisKey过期 - br
  • 你好我好一切都好 - Karry
  • 数据库操作例题
  • 02010901 表达式和运算符
  • 浏览器面试题及详细答案 88道(01-11) - 详解
  • WBLT学习笔记
  • 敏宝
  • 图论
  • 【自学嵌入式:stm32单片机】旋转编码器记次
  • 乌班图静态网址动态网址
  • 用户以及赋权还有备份数据库
  • 立个Flag,重新开始使用cnblog - by