北京市迎春杯竞赛题,北京各区模拟及真题精选

  北京市迎春杯竞赛题,北京各区模拟及真题精选

  【前言】这场比赛是昨天的训练赛,弱队最终做了四题,好像去年是铜牌滚粗。太弱啦。现在写一下部分题解。

  【一片匈奴之地】http://7 xjob 4。com 1。z0。glb。云dn。com/3e 76 f 5 f 069 daf 5 f 6 fa 79969 c 155 E4 e 14

  【题意】WQ和分为放射性废弃物厂房两个人立了攻,汉武帝要把一块沙漠(这片沙漠是有绿洲存在的)赏给这两个人,这片沙漠是正方形的方式存在的,并且给出了举行右上角的坐标(L,L),而且给出了n个绿洲的坐标,面积,现在汉武帝要用一根线把这片地划分成两个部分,使得左边的绿洲面积要大于等于右边的,并且他们之间的差距尽可能的小。询问这根线的位置,保证正整数。

  【解题方法】比较水的题目了,想想就知道要维护一个前缀和的前缀和,这题就做完啦。

  【交流代码】

  #包括cstdio

  #包括输入输出流

  #包括字符串

  使用命名空间标准

  #定义LL龙龙

  常数int N=2e6

  LL pre[N];

  int main()

  {

  int T,left,top,w,h,R,n;

  所有金额;

  scanf(%d ,T);

  while(T - ){

  memset(pre,0,sizeof(pre));

  scanf(%d%d ,R,n);

  总和=0;

  for(int I=0;I n;i ){

  scanf(%d%d%d%d ,左,上,宽,高);

  w=min(w,R-左);

  h=min(h,top);

  前[左1]=h;

  前[左w1]-=h;

  //sum[left w 1]-=1ll * w * h;

  sums=1ll * w * h;

  }

  for(int I=1;I=R;i ){

  pre[I]=pre[I-1];

  }

  for(int I=1;I=R;i ){

  pre[I]=pre[I-1];

  }

  int ans=0;

  LL Minn=0x 3 F3 F3 f 3 f

  for(int I=1;I=R;i ){

  if(pre[I]=(sums-pre[I])pre[I]-(sums-pre[I])=Minn){

  ans=I;

  Minn=pre[I]-(sums-pre[I]);

  }

  }

  printf(%d\n ,ans);

  }

  返回0;

  }

  【今天是个雨天赛后补题】

  https://icpcarchive.ecs.baylor.edu/index.php?option=com _ online judge Itemid=8 page=show _ problem problem=5275

  【题意】给了2个数字串a和数字串b,并且这些串里最多有1-6这6个数字,现在有两种操作,一种是把串里的某一个数字全部变成另外一个数字,另一种操作是把串里某一个位置上的数字变成另一个数字,问把b串通过这两个操作变成a串最少需要多少步?

  【解题方法】只要想到,全部变比一个变肯定来得优,然后我们需处理代价这题就可以做出来了。后面的代价可以直接算嘛,然后维护最小代价就好啦。

  【交流代码】

  #包括队列

  #包括cstdio

  #包括字符串

  #包括输入输出流

  #包含算法

  使用命名空间标准

  const int maxn=50005

  const int INF=0x 3 F3 F3 F3 f;

  int DP[maxn];

  int getid1(int *c){

  int ret=0;

  for(int I=0;i6;i ){

  ret=ret * 6 c[I];

  }

  返回浸水使柔软

  }

  void getid2(int s,int *c)

  {

  for(int I=5;I=0;我- ){

  c[I]=s % 6;

  s/=6;

  }

  }

  空的预求解()

  {

  int c[10],t[10];

  for(int I=0;i6;I)c[I]=I;

  int s=getid 1(c);

  memset(dp,inf,sizeof(DP));

  DP[s]=0;

  队列int que

  阙。推送;

  while(que.size())

  {

  s=que。front();

  阙。pop();

  getid2(s,c);

  for(int I=0;i6;i ){

  for(int j=0;j 6;j ){

  memcpy(t,c,sizeof(t));

  for(int k=0;K6;k)if(t[k]==I)t[k]=j;

  int v=getid 1(t);

  if(dp[v] dp[s] 1){

  DP[v]=DP[s]1;

  阙。推(v);

  }

  }

  }

  }

  }

  int cnt1[10],CNT 2[10][10];

  char a[120],b[120];

  int main()

  {

  presolve();

  while(scanf(%s ,a)!=EOF)

  {

  scanf(%s ,b);

  int len=strlen(a);

  memset(cnt1,0,sizeof(cn t1));

  memset(cnt2,0,sizeof(CNT 2));

  for(int I=0;我leni ){

  cn t1[b[I]- 1 ];

  CNT 2[b[I]-1 ][a[I]-1 ];

  }

  int ans=inf

  int t[10];

  for(int s=0;s maxns ){

  getid2(s,t);

  int now=DP[s];

  for(int I=0;i6;i ){

  now=cn t1[I]-cn T2[I][t[I]];

  }

  ans=min(ans,现在);

  }

  printf(%d\n ,ans);

  }

  返回0;

  }【萨克勒博物馆里的神秘古董】https://icpcarchive.ecs.baylor.edu/index.php?option=com _ online judge Itemid=8 page=show _ problem problem=5279

  【题意】给四个矩形的宽和高,问能否选出3个拼成一个大矩形

  【解题方法】简单模拟,不要漏情况就好,这题队友写的,很稳。

  【交流代码】

  #包括cstdio

  使用命名空间标准

  结构节点

  {

  int h,w;

  } a[4];

  int isok()

  {

  for(int I=0;I 4;i ){

  int flag=0;

  for(int j=0;j 4;j ){

  如果(j==i)继续;

  如果(a[j]).h==a[0].ha[j].w==a[0].h)继续;

  其他标志=1;

  }

  如果(标志==0)返回1;

  flag=0;

  for(int j=0;j 4;j ){

  如果(j==i)继续;

  如果(a[j]).w==a[0].wa[j].h==a[0].w)继续;

  其他标志=1;

  }

  如果(标志==0)返回1;

  }

  返回0;

  }

  int check()

  {

  for(int I=0;I 4;i ){

  for(int j=0;j 4;j ){

  int t1=-1,T2=-1;

  如果(i==j)继续;

  for(int k=0;k4;k ){

  如果(k==jk==i)继续;

  if(t1==-1){

  t1=k;

  for(int x=0;x 4;x ){

  if(x==jx==t1x==i)继续;

  T2=x;

  }

  打破;

  }

  }

  if(a[t1].h==a[t2].w (a[t1]).瓦特[t2].h==a[j].ha[t1].瓦特[t2].h==a[j].w))返回1;

  if(a[t1].h==a[t2].h (a[t1]).瓦特[t2].w==a[j].ha[t1].瓦特[t2].w==a[j].w))返回1;

  if(a[t1].w==a[t2].w (a[t1]).哈哈[t2].h==a[j].ha[t1].哈哈[t2].h==a[j].w))返回1;

  if(a[t1].w==a[t2].h (a[t1]).哈哈[t2].w==a[j].ha[t1].哈哈[t2].w==a[j].w))返回1;

  }

  }

  返回0;

  }

  int main()

  {

  int T;

  scanf(%d ,T);

  while(T - ){

  scanf(%d%d%d%d%d%d%d%d ,a[0].h,a[0].w,a[1].h,a[1].w,a[2].h,a[2].w,a[3].h,a[3].w);

  if(isok())printf( Yes \ n );

  else if(check())printf( Yes \ n );

  else printf( No \ n );

  }

  返回0;

  }

  【我蛇毯】https://icpcarchive.ecs.baylor.edu/index.php?option=com _ online judge Itemid=8 page=show _ problem problem=5281

  【题意】给一个数n,然后现在对于一对多的每一个数我,你都可以用这我个相同的数字我构成一条长度为我的蛇,要满足一个条件,就是2的偶数的转弯必须是偶数,奇数必须是奇数。

  【解题方法】队友在纸上画了一下,感觉是蛇形填数,乱扒了几组样例,感觉还是挺妥的,就开始敲了,不过这题我们调试了很久,中间下标什么很烦,orz。

  【交流代码】

  #包括cstdio

  #包含算法

  使用命名空间标准

  结构节点

  {

  int x,y;

  };

  节点ans[1000][1000];

  int numm[1000];

  void f(int n,int x,int y)

  {

  如果(n=0)返回;

  if(n==1){

  printf(%d %d\n ,x,y);

  返回;

  }

  if(n%2==0){

  f(n-1,x,y ^ 2);

  int i=x,j=y,k,flag=0;

  for(k=0;k n/2;k,i - ){

  if(flag==0) printf(%d %d ,I,j),flag=1;

  else printf( %d %d ,I,j);

  }

  我;

  for(k=0,j;k n/2;k,i ){

  if(flag==0) printf(%d %d ,I,j),flag=1;

  else printf( %d %d ,I,j);

  }

  printf( \ n );

  }

  else if(n=3){

  f(n-3,x,y ^ 2);

  int i=x,j=y,k,cnt=0,num

  num=0;

  for(k=0;k(^北部1)/2;k,i - ) ans[cnt][num ]=(node){i,j };

  我;

  for(k=0,j;k n/2;k,j ) ans[cnt][num ]=(node){i,j };

  numm[CNT]=num;

  j-;

  num=0;

  for(k=0,j;k(n-1)/2;k,j ) ans[cnt][num ]=(node){i,j };

  j-;

  for(i,k=0;k(n-1)/2;k,j - ) ans[cnt][num ]=(node){i,j };

  numm[CNT]=num;

  j;

  num=0;

  for(k=0,j-;k(n-2)/2 ^;k,j - ) ans[cnt][num ]=(node){i,j };

  j;

  for(k=0,I;k(n-2)/2;k,i ) ans[cnt][num ]=(node){i,j };

  numm[CNT]=num;

  for(int I=CNT-1;I=0;我- ){

  for(int j=0;j numm[I];j ){

  if(j==0) printf(%d %d ,ans[i][j].x,ans[i][j].y);

  else printf( %d %d ,ans[i][j].x,ans[i][j].y);

  }

  printf( \ n );

  }

  }

  }

  int main()

  {

  int n;

  while(~scanf(%d ,n)){

  if(n%2==0) printf(%d %d\n ,n/2,n ^ 1);

  else printf(%d %d\n ,(n ^ 1)/2,n);

  if(n%2==0) f(n,n/2,1);

  else f(n,(n ^ 1)/2,1);

  }

  返回0;

  }

  【

  J - Osu!主人】

  https://icpcarchive.ecs.baylor.edu/index.php?option=com _ online judge Itemid=8 page=show _ problem problem=5282

  【题意】不是太懂,我直接看样例,猜了个结论秒过,我的结论就是连续上升的数字或者s的和。

  【解题方法】如上。

  【交流代码】

  #包括cstdio

  #包括字符串

  #包括输入输出流

  #包含算法

  使用命名空间标准

  int n;

  int main()

  {

  while(scanf(%d ,n)!=EOF)

  {

  int x;

  char op[3];

  int ans=0;

  int last=-1;

  for(int I=0;I n;i ){

  scanf(%s ,op);

  if(op[0]==S){

  美国国家标准(American National Standards的缩写)

  last=-1;

  }否则{

  scanf(%d ,x);

  如果(x倒数第一!=-1){

  last=x;

  继续;

  }否则{

  美国国家标准(American National Standards的缩写)

  last=x;

  }

  }

  }

  printf(%d\n ,ans);

  }

  返回0;

  }

  转载请联系作者授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: