ABC三道大水题,自信满满锁了溜出自习室回寝睡觉,第二天起来发现变成两道题了,哭唧唧。

回头翻代码吃了一口大翔,少写了两行被自己gank了。

然后由于出题人的数据放错了导致D题一开始没人过,E和F零星有几个人,然后就洒富富跑去开F和E,数据改了重判之后D题人数飙升但是没什么时间了(一定是出题人的锅)。

好吧怪自己没把题目都看一遍,盲目跟榜会吃翔的,以后记得不管什么比赛都尽可能把所有题目都看一遍。


A. Div. 64:

给你一串1和0,问你能否删去部分数字使其转换为10进制后能被64整除。

题意翻译过来就是问你能不能在这一串0和1中找出一个非连续子串1000000,能找到即可。

AC代码:

#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;int main(void){char str[105] ;scanf ("%s", str );int l = strlen(str) ;int num = 0 , flag = 0 ;for ( int i = 0 ; i < l ; i ++ ){if ( str[i] == '1' ){flag = 1 ;}if ( str[i] == '0' && flag == 1 ){num ++ ;}if ( num == 6 ){break ;}}if ( num == 6 ){printf ("yes\n");} else {printf ("no\n");}return 0;
}

B. Cubes for Masha:

给你1到3个骰子,每个上面写着0-9其中的六个数字,问你从1开始能取到的最大数是多少(不需要用上所有骰子),比如手中有一个骰子,写着1 2 3 4 5 6,则最大不能取到的是6,两个骰子分别写着0 1 2 3 4 5 , 6 7 8 9 1 2,则最小不能取到的是29(0 1 2 3 4 5 6 7 8 9分别可以由一个骰子得到,10 可以由第二个骰子的1和第一个骰子的0得到,以此类推)。

考虑到三个骰子最多三位数,直接暴力开一个1005的整形数组num,把所有可能情况都跑一遍记录在num中,然后在num中找一个最小的找不到的数,那这个数的前一个就是最大的找得到的数。

AC代码:

#include <cstdio>
#include <cstring>using namespace std;int main(void){int num[1005] = {} , cube[3][8] ;int n ;scanf ("%d", &n );for ( int i = 0 ; i < n ; i ++ ){for ( int j = 0 ; j < 6 ; j ++ ){scanf ("%d", &cube[i][j] );}}if ( n == 1 ){for ( int i = 0 ; i < 6 ; i ++ ){num[cube[0][i]] = 1 ;}} else if ( n == 2 ){for ( int i = 0 ; i < 6 ; i ++ ){num[cube[0][i]] = 1 ;num[cube[1][i]] = 1 ;}for ( int i = 0 ; i < 6 ; i ++ ){for ( int j = 0 ; j < 6 ; j ++ ){num[cube[0][i]*10+cube[1][j]] = 1 ;num[cube[0][j]*10+cube[1][i]] = 1 ;num[cube[1][j]*10+cube[0][i]] = 1 ; //PP代码这一句和下一句没写,导致赛后wa82  一大口shitnum[cube[1][j]*10+cube[0][i]] = 1 ; }}} else if ( n == 3 ){for ( int i = 0 ; i < 6 ; i ++ ){num[cube[0][i]] = 1 ;num[cube[1][i]] = 1 ;num[cube[2][i]] = 1 ;}for ( int i = 0 ; i < 6 ; i ++ ){for ( int j = 0 ; j < 6 ; j ++ ){num[cube[0][i]*10+cube[1][j]] = 1 ;num[cube[0][i]*10+cube[2][j]] = 1 ;num[cube[1][i]*10+cube[0][j]] = 1 ;num[cube[1][i]*10+cube[2][j]] = 1 ;num[cube[2][i]*10+cube[0][j]] = 1 ;num[cube[2][i]*10+cube[1][j]] = 1 ;}}for ( int i = 0 ; i < 6 ; i ++ ){for ( int j = 0 ; j < 6 ; j ++ ){for ( int k = 0 ; k < 6 ; k ++ ){num[cube[0][i]*100+cube[1][j]*10+cube[2][k]] = 1 ;num[cube[0][i]*100+cube[2][j]*10+cube[1][k]] = 1 ;num[cube[1][i]*100+cube[0][j]*10+cube[2][k]] = 1 ;num[cube[1][i]*100+cube[2][j]*10+cube[0][k]] = 1 ;num[cube[2][i]*100+cube[0][j]*10+cube[1][k]] = 1 ;num[cube[2][i]*100+cube[1][j]*10+cube[0][k]] = 1 ;}}}}for ( int i = 1 ; i < 1005 ; i ++ ){if ( num[i] == 0 ){printf ("%d\n", i-1 );break ;}}return 0;
}

C. Solution for Cube:

给你一个2*2*2的二阶魔方,给你24个数字,分别表示六个面上每个格子的颜色,问你这个魔方能否由一次旋转变为一个拼好了的魔方(必须转一次)。

(出题人甚至给错了例1的配图)

题目中的样例2输入为:

5 3 5 3 2 5 2 5 6 2 6 2 4 4 4 4 1 1 1 1 6 3 6 3

对应下图:

1-24所对应的方格是确定的。

思路:首先在输入时判断这个魔方有几个面已经拼好了,记录拼好的面的个数以及拼好的是哪一个面。

如果拼好的面不足两个或多于两个,必定不能由一次旋转得到拼好的魔方。

如果拼好的面为两个,则再判断拼好的两个面是否为相互面对的面(相互面对的面没有边或点连接),如果相互面对则一顿暴力的判断。

AC代码:

#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;int main(void){int a[26] = {} , flag[6] = {} , cnt = 0 ;for ( int i = 0 ; i < 6 ; i ++ ){for ( int j = 1 ; j <= 4 ; j ++ ){scanf ("%d", &a[i*4+j] );}if ( a[i*4+1] == a[i*4+2] && a[i*4+1] == a[i*4+3] && a[i*4+1] == a[i*4+4] ){flag[i] = 1 ;cnt ++ ;}}if ( cnt != 2 ){printf ("NO\n");} else {if ( flag[0] && flag[2] ){if ( ( a[5] == a[6] && a[5] == a[15] && a[5] == a[16] && a[7] == a[8] && a[7] == a[17] && a[7] == a[18] && a[19] == a[20] && a[19] == a[21] && a[19] == a[22] && a[13] == a[14] && a[13] == a[23] && a[13] == a[24] ) || ( a[7] == a[8] && a[7] == a[13] && a[7] == a[14] && a[5] == a[6] && a[5] == a[19] && a[5] == a[20] && a[17] == a[18] && a[17] == a[23] && a[17] == a[24] && a[21] == a[22] && a[21] == a[15] && a[21] == a[16] ) ){printf ("YES\n");} else {printf ("NO\n");}} else if ( flag[1] && flag[5] ){if ( ( a[1] == a[2] && a[1] == a[17] && a[1] == a[19] && a[9] == a[18] && a[9] == a[10] && a[9] == a[20] && a[12] == a[11] && a[11] == a[14] && a[11] == a[16] && a[3] == a[4] && a[3] == a[13] && a[3] == a[15] ) || ( a[4] == a[3] && a[3] == a[18] && a[3] == a[20] && a[11] == a[12] && a[11] == a[17] && a[11] == a[19] && a[9] == a[10] && a[9] == a[13] && a[9] == a[15] && a[1] == a[2] && a[1] == a[14] && a[1] == a[16] ) ){printf ("YES\n");} else {printf ("NO\n");}} else if ( flag[3] && flag[4] ){if ( ( a[1] == a[3] && a[1] == a[6] && a[1] == a[8] && a[5] == a[7] && a[5] == a[10] && a[5] == a[12] && a[9] == a[11] && a[9] == a[21] && a[9] == a[23] && a[2] == a[4] && a[2] == a[22] && a[2] == a[24] ) || ( a[1] == a[3] && a[1] == a[21] && a[1] == a[23] && a[2] == a[4] && a[2] == a[5] && a[2] == a[7] && a[9] == a[11] && a[9] == a[6] && a[9] == a[8] && a[10] == a[12] && a[10] == a[22] && a[10] == a[24] ) ){printf ("YES\n");} else {printf ("NO\n");}} else {printf ("NO\n");}}return 0;
}

补题后会放上代码(虽然这么弱感觉补不了什么题,试试吧)。

---------------------------------------------补题分割线---------------------------------------------

D. Ratings and Reality Shows

一直wa4,没有找到原因,数据组数太多又不能调就没仔细看,所以骂了很久的数据。然后稍微仔细看了下,答案是0,我的输出是1,wori为什么输出可以是0,一大口shit。

题意:一个人要去参加一个比赛。比赛期间她有两个活动A和B,在给定的某一天进行其中一个活动(每天至多进行一个活动)。从第0天开始她可以举办一次演讲,在演讲之前,进行A活动会给她加上a分,进行B活动会给她减去b分;而在举办演讲之后,进行A活动会给她加上c分,进行B活动会给她减去d分,她的初始分数start给出,演讲活动的buff持续时间len也给出,问你:她最早可以在第几天举办演讲,来满足演讲之前和期间的总分都不会出现负数。

思路:尺取法,起始标记点s记录左端,终点标记点e记录右端,用一个sum维护初始的分数。若s点和e点之间的距离大于等于给定len,则判断初始分数加上过程中的最低分数是否满足大于等于0。若满足则直接输入,否则将初始分数sum加上左端s位置的对应分数(若s对应位置当天是加的则加上,减去的则减去),而最小值与sum相反,减去左端s的对应分数。若改变后的sum小于0,输出-1(因为要求在举办演讲之前的分数也要大于等于0,也是一个wa点)。

注意:左端s的初始点的左侧应为第-1天(即tag为-1),否则在第四组样例中你的输出也会为1而不是0(同为wa点)。

测试数据:

5 1 1 1 1 0 2

1 1

2 1

3 1

4 1

5 1

你的输出应该为0而不是1。

AC代码:

#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;typedef long long ll ;struct node {int q , t ;
};node pos[300005] ;int main(void){ll n , a , b , c , d , st , len ;scanf ("%I64d%I64d%I64d%I64d%I64d%I64d%I64d",&n,&a,&b,&c,&d,&st,&len );for ( int i = 1 ; i <= n ; i ++ ){scanf ("%d%d",&pos[i].q,&pos[i].t );}ll sum = st , ans = 0 , minn = 0 ;int e = 1 ;pos[0].q = -1 ;for ( int s = 1 ; s <= n ; s ++ ){while ( e <= n && pos[e].q - pos[s].q <= len ){if ( pos[e].t == 1 ){ans += c ;} else {ans -= d ;}minn = min ( minn , ans );e ++ ;}if ( sum + minn >= 0 ){printf ("%d\n", pos[s-1].q + 1 );return 0 ;}if ( pos[s].t == 1 ){ans -= c ;minn -= c ;sum += a ;} else {ans += d ;minn += d ;sum -= b ;}if ( sum < 0 ){printf ("-1\n");return 0;}}printf ("%d\n", pos[n].q + 1 );return 0;
}

cf div2 #444 (ABC)(D已补)相关推荐

  1. VerifyError: Error #1107: ABC 数据已损坏,尝试的读取操作超出范围

    VerifyError: Error #1107: ABC 数据已损坏,尝试的读取操作超出范围 项目中,出现报错: VerifyError: Error #1107: ABC 数据已损坏,尝试的读取操 ...

  2. MAR在计算机组成原理上是啥,《计算机组成原理》(答案已补全).doc

    <计算机组成原理>(答案已补全).doc (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 .<计算机组成原理&g ...

  3. hpprobook440g1拆机_【商务情节】HP ProBook 440 G1 开箱!CHH首发!【已补简测!】

    本帖最后由 casperczy 于 2014-3-13 20:52 编辑 电脑是买给我爸的~之前帮他看了一个月~选来选去~他要求太多~好吧~最后还是他自己看中的这款~依然喜欢商务风格~~不过他也不玩游 ...

  4. 【解题报告】CF DIV2 #ROUND 723 A~D

    [解题报告]CF DIV2 #ROUND 723 A~D 比赛链接 比赛评价: 发现这场十点就开了,然后就和ph巨佬一起玩了一场.我两分别再A和B罚时罚飞了,索性后面把C1,C2整出来了 排名2500 ...

  5. 递推最小二乘法RLS的轮胎侧偏刚度估计(原书缺失代码已补全)

    目录 1 参数辨识 1.1 最小二乘法 1.2 递推最小二乘法 RLS 1.3 具有遗忘因子 λ 的递推最小二乘法 2 轮胎线性侧偏刚度估计 2.1 RLS 算法分析 2.2 联合仿真平台的设计 ca ...

  6. 2023牛客寒假算法基础集训营5(通过ABCDHIKL) I题有详解(F已补)

    其他题待补中-- 链接:2023牛客寒假算法基础集训营5 简单题 A 小沙の好客(贪心,前缀和,二分) 题意思路 给定 n n n个商品的价值, q q q次询问,每次询问 k , x k, x k, ...

  7. Educational Codeforces Round 41(已补D,E)

    D. Pair Of Lines 题目大意: 给\(n\)个点,问是否存在两条直线(可以为同一条)能覆盖所有的点. 解题思路: 首先一个或者两个或者三个点都是肯定可以用两条线覆盖的. 如果点的个数大于 ...

  8. 2022华中杯数学建模思路实时更新-ABC思路已更新(A一二程序已更新)-4月30日19时

    [关注我,思路实时更新,详细思路持续更新.去年原创思路,被很多机构贩卖,都是免费的,程序也是免费的,以前是您好啊数模君/数模孵化园,现在改名啦,认准:,原创发布,别被坑了] 目录 [详细思路,B已更新 ...

  9. CF div2 PA 2019.02.17

    一道签到题 思路:在起点处买完步长,之后每走距离买一次 实现:1 * v + 2 + 3 + 4 + ->= n - 1即可(对n >= v需特殊判定) #include<cstdi ...

最新文章

  1. 为什么DOM操作很慢
  2. 什么是工装服_王俊凯穿连体工装亮相跨年晚会,中国风满满的设计,尽显帅气...
  3. C#-多线程 126
  4. scanf返回值_IO FILE之任意读写和scanf的限制绕过
  5. 百度社会化分享组件使用问题
  6. 中移M5310A NBIoT模组通信测试命令
  7. Qt多线程端口扫描工具(开源)
  8. 等概率随机函数的实现(对立事件的产生)
  9. json序列化 java对象_Java中将JSON反序列化为泛型对象
  10. 使用Jflash给华大半导体的MCU烧录程序
  11. RF无线射频电路设计难点分析
  12. Twaver-HTML5基础学习(32)Network样式andTree样式
  13. linux取证——基础取证命令集合
  14. 世界顶级黑客,都有哪些神仙操作?这篇文章带你了解一下!
  15. html5 video 手机端视频播放全屏显示
  16. PDF转word怎么转换
  17. Discuz论坛搬家教程
  18. javaweb JAVA JSP超市管理系统源码超市订单管理系统商品进销存系统超市后台管理
  19. 超市会员管理系统实战项目
  20. Zwave zniffer 数据通过串口接收

热门文章

  1. 【Linux】命令别名与历史命令(alise\history)
  2. 下载:简体中文版Live Messenger 8.1 Beta
  3. 产品沉思录精选:西方人读孔子-有关德、礼及生死
  4. 网络安全入门基础须知
  5. ThinkPad机型BIOS开启VT虚拟化技术
  6. Fourier分析入门——第1章——数学预备知识
  7. IE8:SCRIPT438: 对象不支持“play”属性或方法,audio.play()无法使用
  8. 使用ArchR分析单细胞ATAC-seq数据(第十二章)
  9. HTML的背景颜色和背景图片
  10. 小码农的代码(一)----------SpringJDBC的使用