Codeforces Good Bye 2015 ABCDE

Facebook Hacker Cup 2015 Round 1 解题报告 Homework         求一个区间[A,B]中素因数个数为K的数有多少个。做法是dp。对每个数i,找到它的某一个素因数d,i的结果就由i/d推得。找的方法是修改筛法。 #include #include #include #include #include #include #include #include #include using namespace 阅读详情

果然到了年末,智商余额不足,无限崩盘。

A New Year and Days

对着新年日历看一下,分类输出各种情况即可。

#include <bits/stdc++.h>

using namespace std;

#define ll long long

int main(){
    int n;
    cin>>n;
    string q;
    string str;
    cin>>q;
    cin>>str;

    if(str=="week"){
        if(n<=4||n==7){
            cout<<52<<endl;
        }else{
            cout<<53<<endl;
        }
    }else{
        if(n<=29){
            cout<<12<<endl;
        }else if(n<=30){
            cout<<11<<endl;
        }else{
            cout<<7<<endl;
        }
    }
    return 0;
}

B New Year and Old Property

把符合条件的数,用位运算预处理出来,然后计数。

#include <bits/stdc++.h>

using namespace std;

#define ll long long

ll tab[5555];

int main(){
    ll a,b;
    cin>>a>>b;
    int k=0;
    for(ll i=2;i<61;i++){
        ll tmp = (1LL<<i) - 1;
        for(int j=0;j<i-1;j++){
            ll m = 1LL<<j;
            ll cur = tmp^m;
            tab[k++]=cur;
        }
    }
    ll ans = 0;
    for(int i=0;i<k;i++){
        if(tab[i]>= a && tab[i]<=b){
            ans++;
        }
    }
    cout<<ans<<endl;
    return 0;
}

C New Year and Domino

利用前缀和,计算从左上角到每个格子有多少种放法。然后利用容斥原理拿4个矩形算一下,注意处理边界。

#include <bits/stdc++.h>

using namespace std;

#define ll long long

char mp[555][555];
int cnt1[555][555];
int cnt2[555][555];
int ans[555][555];

int main(){
    int h,w;
    cin>>h>>w;

    for(int i=1;i<=h;i++){
        scanf("%s",mp[i]+1);
    }

    for(int i=2;i<=h;i++){
        for(int j=1;j<=w;j++){
            if(mp[i][j]=='.' && mp[i-1][j]=='.'){
                cnt1[i][j]=cnt1[i-1][j]+1;
            }else{
                cnt1[i][j]=cnt1[i-1][j];
            }
        }
    }

    for(int i=2;i<=w;i++){
        for(int j=1;j<=h;j++){
            if(mp[j][i]=='.' && mp[j][i-1]=='.'){
                cnt2[j][i]=cnt2[j][i-1]+1;
            }else{
                cnt2[j][i]=cnt2[j][i-1];
            }
        }
    }
    ////////
    for(int i=1;i<=h;i++){
        for(int j=2;j<=w;j++){
            cnt1[i][j]+=cnt1[i][j-1];
        }
    }

    for(int i=1;i<=w;i++){
        for(int j=2;j<=h;j++){
            cnt2[j][i]+=cnt2[j-1][i];
        }
    }

    for(int i=1;i<=h;i++){
        for(int j=1;j<=w;j++){
            ans[i][j] = cnt1[i][j] + cnt2[i][j];
        }
    }

    int q;
    cin>>q;
    while(q--){
        int x1,y1,x2,y2;
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        int res = ans[x2][y2]-ans[x1-1][y2]-ans[x2][y1-1]+ans[x1-1][y1-1];
        for(int i=x1;i<=x2;i++){
            if(mp[i][y1]=='.'&&mp[i][y1-1]=='.')res--;
        }
        for(int i=y1;i<=y2;i++){
            if(mp[x1][i]=='.'&&mp[x1-1][i]=='.')res--;
        }
        printf("%d\n",res);
    }

    return 0;
}

D New Year and Ancient Prophecy

dp。dp(i,j)表示考察到第i个字符,最后一段长度为j的方案数。dp(i,j)显然由dp(i-j,k)转移而来,k可以取若干个值,需要优化避免重复计算。另外由于后一个数需要严格大于前一个数,也就是涉及到最后两个数的大小比较,同样需要优化,原理类似。详见代码。

#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int mod = 1e9+7;

char num[5010];

int dp[5010][5010]; 
int sum[5010][5010];
pair<int,int> cmp[5010][5010];

int isLE(int a,int b,int c,int d){
    int len = b-a+1;

    int i=0;
    if(a>0){
        pair<int,int> pre = cmp[a-1][len];
        if(pre.second){ 
            if(pre.first){  
                cmp[a][len].first = pre.first;
                cmp[a][len].second = pre.second - 1;
                return pre.first;
            }else{          
                i= len-1 ;
            }
        }else{
            i=0;
        }
    }

    for(;i<len;i++){
        if(num[a+i]>num[c+i]){
            cmp[a][len].first = 1;
            cmp[a][len].second = i;
            return 1;
        }else if(num[a+i]<num[c+i]){
            cmp[a][len].first = -1;
            cmp[a][len].second = i;
            return -1;
        }
    }
    cmp[a][len].first = 0;
    cmp[a][len].second = len-1;
    return 0;
}

int main(){
    int n;
    cin>>n;
    scanf("%s",num);
    for(int i=0;i<n;i++){
        for(int j=i;j>=1;j--){  
            if(num[j]=='0'){
                dp[i][i-j+1]=0;
            }else{
                int start = j-1 - (i-j);
                if(start<0)start=0;
                if(j-1 - start == i-j){
                    if(isLE(start,j-1,j,i) >=0){
                        start++;
                    }
                }
                int tmp = sum[j-1][j-start];
                dp[i][i-j+1]+=tmp;
                dp[i][i-j+1]%=mod;
            }
            sum[i][i-j+1]=sum[i][i-j]+dp[i][i-j+1];
            sum[i][i-j+1]%=mod;
        }
        dp[i][i+1]=1;
        sum[i][i+1]=sum[i][i]+dp[i][i+1];
        sum[i][i+1]%=mod;
    }
    int ans = 0;
    for(int i=0;i<=n;i++){
        ans+=dp[n-1][i];
        ans%=mod;
    }
    cout<<ans<<endl;
    return 0;
}

E New Year and Three Musketeers

二分答案+贪心判断答案是否可行。二分部分不用说,解肯定在[n/3,n]这个区间。难点在于贪心,需要给火枪手和敌人排序,按从大到小的顺序处理敌人。敌人分配原则是,优先分配给弱的火枪手打,优先分配给更少的火枪手打。还要注意一个坑,答案不是三个火枪手的最长工作时间,因为可能会有人被迫等待,所以还要考虑协同作战的时间是否超出。

#include <bits/stdc++.h>

using namespace std;

#define ll long long

int m[10];
int t[200010];
int n;

bool judge(int x){
    int cnt[3]={0,0,0};
    int share = 0;
    for(int i=n-1;i>=0;i--){
        if(t[i]<=m[0]){
            if(cnt[0]<x){
                cnt[0]++;
            }else if(cnt[1]<x){
                cnt[1]++;
            }else if(cnt[2]<x){
                cnt[2]++;
            }else{
                return 0;
            }
        }else if(t[i]<=m[1]){
            if(cnt[1]<x){
                cnt[1]++;
            }else if(cnt[2]<x){
                cnt[2]++;
            }else{
                return 0;
            }
        }else if(t[i]<=m[2]){
            if(cnt[2]<x){
                cnt[2]++;
            }else if(t[i]<=m[0]+m[1] && cnt[0]<x && cnt[1]<x){
                cnt[0]++;
                cnt[1]++;
                share++;
            }else{
                return 0;
            }
        }else if(t[i]<=m[0]+m[1]){
            if(cnt[0]<x && cnt[1]<x){
                cnt[0]++;
                cnt[1]++;
                share++;
            }else if(cnt[0]<x && cnt[2]<x){
                cnt[0]++;
                cnt[2]++;
                share++;
            }else if(cnt[1]<x && cnt[2]<x){
                cnt[1]++;
                cnt[2]++;
                share++;
            }else{
                return 0;
            }
        }else if(t[i]<=m[0]+m[2]){
            if(cnt[0]<x && cnt[2]<x){
                cnt[0]++;
                cnt[2]++;
                share++;
            }else if(cnt[1]<x && cnt[2]<x){
                cnt[1]++;
                cnt[2]++;
                share++;
            }else{
                return 0;
            }
        }else if(t[i]<=m[1]+m[2]){
            if(cnt[1]<x && cnt[2]<x){
                cnt[1]++;
                cnt[2]++;
                share++;
            }else{
                return 0;
            }
        }else{
            if(cnt[0]<x && cnt[1]<x && cnt[2]<x){
                cnt[0]++;
                cnt[1]++;
                cnt[2]++;
                share++;
            }else{
                return 0;
            }
        }
    }
    if(share>x)return 0;
    return 1;
}

int bs(int l,int r){
    int mid;
    int ans = 200000;
    while(l<=r){
        mid = (l+r)>>1;
        if(judge(mid)){
            r=mid-1;
            ans = min(ans,mid);
        }else{
            l=mid+1;
        }
    }   
    return ans;
}

int main(){

    cin>>n;
    for(int i=0;i<3;i++){
        cin>>m[i];
    }
    sort(m,m+3);
    int sum = m[0]+m[1]+m[2];
    for(int i=0;i<n;i++){
        scanf("%d",&t[i]);
    }
    sort(t,t+n);
    if(t[n-1]>sum){
        cout<<-1<<endl;
    }else{
        int ans = bs(n/3,n);
        cout<<ans<<endl;
    }
    return 0;
}
MobaXterm终端工具个人学习版安装包及常用配置备份 资源包含 MobaXterm 个人版的安装包以及日常运维常用的基础配置备份文件。适用于网络工程师及运维人员用于日常的服务器管理、SSH 连接及串口调试。 压缩包内附带了个人整理的软件使用技巧与配置说明(仅供个人学习参考)。请各位同行下载后注意,技术工具请尽量支持官方正版,本资源仅供个人测试与交流使用,切勿用于商业环境。 立即下载

相关推荐

机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取

机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取

Codeforces VK Cup 2016 - Round 1 (Div. 2 Edition)

A. Bear and Reverse Radewoosh  按要求计算一下即可。#include <bits/stdc++.h>#define ll long longusing namespace std;int p[111]; int t[111];int main(){ int n,c; cin>>n>>c; for(int i=1;i<=n;i++){

A Cube Master 2万+

科技中介服务机构如何借助平台提升技术撮合服务的专业性与响应速度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

河南省第七届ACM大学生程序设计竞赛 解题报告

这两天把去年省赛的题挂到了OJ上,顺便练手。 A.物资调度 DP,类似01背包。dp(i,j)表示情况数,第一维表示考察到第i种物资,第二维表示总数量为j。显然,如果按照题目给的数据范围,答案会超出64位整型的范围,但是题目并没有要求取模,只能说数据太弱。 B.海岛争霸 Floyd算法,稍微修改一下状态转移方程就可以了。Floyd是求和,这题是取最大。 C.机器人

A Cube Master 3360

产业园区如何利用AI技术提升科技成果转化服务的响应速度与转化成功率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

11232131231231是的

11232131231231是的

Google Code Jam 2015 Round 1A 解题报告

太弱了,比赛时只出了A的大数据和BC小数据,排到1700+。赛后才把B的小数据过了。 A. Mushroom Monster         就是贪心模拟。第一种吃法,只有当前时刻比10秒前少才去吃减少的量,否则不吃。第二种吃法,计算每十秒的减少量,以减少量最大的作为平均速率去吃。 #include using namespace std; int m[10010];

A Cube Master 2409

利用Arcgis提取nc数据并计算区域年均温

1.下载数据。2.解压数据至不含中文的路径中。打开工具箱中的多维分析工具-创建NetCDF栅格图层,导入数据。3.打开工具箱中的数据管理工具-图层和表视图-创建栅格图层,导入数据,对输出数据进行命名,得到月均温栅格数据。4.选择工具箱-Spatial Analyst工具(空间分析工具)-地图代数-栅格计算器,计算全国一年年均温。​5.将其导出为.tif格式数据,方便后期使用。6.选择工具箱-Spatial Analyst工具(空间分析工具)-区域分析--以表格显示分区统计,得到分区域的气温数据。

什么都学亿点点的博客 7992

2015 百度之星初赛1 解题报告

1001 超级赛亚ACMer         贪心。首先击败战斗力不大于m的最强者,每次去找可以增强战斗力,然后能击败的最强者,把自己战斗力增加到和他一样去打。如果能打败最强的对手,就可以了。 1002 找连续数         离散化,离线按k从1~1000递增的顺序,维护以每个位置为起点长度为k的最小值,最大值,以及是否有相同数。如果MAX-MIN=k-1且没有相同数,长度为k的

A Cube Master 1794

docker安装的 n8n提示Your n8n server is configured to use a secure cookie, however you are either visiting

将原来的docker n8n进行删除后即可通过一下方式重新安装,如安装完n8n,提示。

满地找牙的博客 3366

从零到一:基于GeneMark-ES/ET的新基因组注释实战指南

本文提供了一份基于GeneMark-ES/ET的新基因组注释实战指南。详细介绍了从环境搭建、数据准备到核心运行的全流程,重点解析了ES(从头预测)与ET(结合RNA-Seq证据)两种模式的选择与操作,并分享了Perl模块依赖、并行处理等常见问题的解决方案,帮助生物信息学研究者高效完成基因预测工作。

weixin_29266647的博客 209

2015 ICPC 长春网赛 解题报告

只A了几道水题,还好晋级了。 07 The Water Problem         果然是水题,随便模拟一下就好了。为了题解完整性贴出来。 #include #include #include #include #include #include using namespace std; int a[1010]; int main(){

A Cube Master 1463

Fluent新手避坑:遇到‘Floating point exception’别慌,这7个排查步骤帮你搞定

本文为Fluent新手提供了遇到‘Floating point exception’错误时的7个详细排查步骤。从理解浮点异常的本质到边界条件检查、时间步长设置、求解器选择、网格优化、亚松弛因子调节以及高阶格式的取舍,帮助用户快速定位并解决问题,确保CFD仿真的稳定性和准确性。

weixin_30480075的博客 260

福州大学第十二届程序设计竞赛 解题报告

由于这个OJ比较蛋疼,比赛时提交的代码看不到,所以就不附代码了,只说思路。 A 非提的救赎         待补。 B 完美的数字         求一个区间内,所有数的“完美度”的和,完美度定义为数i能分解为多少组i=A*A*B(A         预处理算出每个数的平方、立方。写一个函数fun(x)计算区间1~x的结果,题目的答案就是fun(b)-fun(a-1)。在

A Cube Master 1430

百度飞桨+文心大模型实战:生成式AI工程师认证备考全攻略(含真题解析)

本文详细解析百度飞桨与文心大模型结合的生成式AI工程师认证备考策略,涵盖认证体系、学习路径、核心技能突破及真题分析。帮助开发者掌握大模型原理、飞桨平台操作和文心大模型应用,高效通过工信部与百度联合认证考试。

loss4bartender的博客 682

比NTP还牛逼的时间同步协议:1588v2,亚微秒级!

1588v2,又称为Precision Time Protocol Version 2,即精密时间协议的第二版本,或称为PTPv2,是一种精密时间同步协议标准,旨在实现网络中设备之间的高精度时间同步。该协议由IEEE标准组织发布,并在网络测量和控制系统中得到广泛应用。1588v2的主要目的是在计算机网络中提供高度准确的时间同步。它可用于确保不同设备之间的时钟同步,从而协调它们的操作。这对于需要协同工作的系统、无线通信基站等具有关键性的应用非常重要。

网络技术联盟站 4281

Google Code jam Qualification Round 2015 解题报告

Problem A. Standing Ovation         题目说的是有许多观众,每个观众有一定的羞涩值,只有现场站起来鼓掌的人数达到该值才会站起来鼓掌,问最少添加多少羞涩值任意的人,才能使所有人都站起来鼓掌。         贪心模拟一下就好,添加的人默认让他们羞涩值为0,扫一遍,让加到刚好够就行。 #include #include #include #includ

A Cube Master 1343

PyMuPDF为PDF文件添加注释

我将介绍如何使用PyMuPDF库来为PDF文件添加注释,包括文本注释、高亮注释、下划线注释等15种注释的使用方法。

布啦啦 2242

Codeforces Round #291 (Div. 2) 解题报告 (A B C D)

A Chewbaсca and Number         贪心,每一位取t和9-t中较小的。注意首位不能为0。 #include #include #include #include #include #include #include #include #include #include using namespace

A Cube Master 1178

Python 爬虫实战:模拟登录网易云音乐(加密接口逆向与自动化登录实现)

网易云音乐作为国内主流的音乐流媒体平台,其丰富的音乐资源和个性化推荐算法吸引了大量用户。对于开发者而言,模拟登录网易云音乐并实现自动化操作,可以用于数据分析、歌单同步、歌词抓取等场景。然而,网易云音乐采用了多重加密机制和反爬策略,直接模拟登录存在较大挑战。

yansideyucsdn的博客 2590

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

2012 ACM-ICPC 杭州站解题报告(4道签到题)

hdu 4461 The Power of Xiangqi         题意:

A Cube Master 1153

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Codeforces Round #301 (Div. 2) 解题报告(ABCD)

A Combination Lock         n位0~9密码锁两种状态之间,问最少拨多少次。注意可能越过'0'。直接上代码。。 #include using namespace std; char num1[1010]; char num2[1010]; int main(){ int n; cin>>n; cin>>num1>>num2; int ans=0;

A Cube Master 1096

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Codeforces Round #273 (Div. 2) 解题报告 (A B C D)

A. Initial Bet

A Cube Master 1047

Codeforces Bubble Cup 8 - Finals [Online Mirror] 解题报告

D Tablecity         从一头往另一头扫一遍,再逆着回来就好了。因为贼每走一步,横坐标的奇偶性都会改变。 #include #include #include #include using namespace std; int i; int main(){ printf("2000\n"); for (i=1;i<=1000;i++) printf("%d 1

A Cube Master 996

ACdream区域赛指导赛之手速赛系列(5) 解题报告 A C D

problem A

A Cube Master 975

Codeforces Round #281 (Div. 2) 解题报告(A B C D)

这场比赛真是大起大落。。比的时候一度排在rank1,以为从此达到人生巅峰了,结果最后B,C都FST了,都是因为很2的错误,B为了偷懒,居然把数加到string里比较字典序。C漏一个"=",而且有语句写错了位置。         CF题的难度,好像有变水的趋势。。以前前3题没算法,现在前4题都没有,而且还没编程复杂度。。 A. Vasya and Football

A Cube Master 912
上一篇: 2015.12 hdu 校赛简易题解
下一篇: Codeforces Round #338 (Div. 2) ABCDE
squee_spoon
博客等级 码龄14年 61粉丝 455原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值