USACO2.2【统计,dp,模拟,位运算】
正题
T1:序言页码 PrefaceNumberingPreface NumberingPrefaceNumbering
评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1465
题目大意
求1∼n1\sim n1∼n的罗马数字每个字母出现的次数。
解题思路
先写一个表,表示这个位上出现哪个数字表示10n10n10n的字母出现次数和表示5∗10n5*10n5∗10n的字母出现的次数。
然后直接计算
code
#include<cstdio>
#include<string>
using namespace std;
const char f[8]={' ','I','V','X','L','C','D','M'};
const int I[11]={0,1,2,3,1,0,1,2,3,1};
const int V[11]={0,0,0,0,1,1,1,1,1,0};
int n,c[8];
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){c[1]+=I[i%10];c[2]+=V[i%10];c[3]+=I[i%100/10]+(i%10==9);c[4]+=V[i%100/10];c[5]+=I[i%1000/100]+(i%100/10==9);c[6]+=V[i%1000/100];c[7]+=I[i/1000]+(i%1000/100==9);}for(int i=1;i<=7;i++)if(c[i]) printf("%c %d\n",f[i],c[i]);
}
T2:集合 SubsetSumsSubset SumsSubsetSums
评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1466
题目大意
求将1∼n1\sim n1∼n分解为两组且两组之和相等的方案数。
解题思路
用fi,jf_{i,j}fi,j表示前i个数,两组相差为j时的方案总数。
然后
fi,j=fi,∣j−i∣+fi,j+if_{i,j}=f_{i,|j-i|}+f_{i,j+i}fi,j=fi,∣j−i∣+fi,j+i
然后得出的答案要除2,因为两组是一样的。
code
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
ll n,sum,f[40][801];
int main()
{scanf("%lld",&n);sum=0;f[0][0]=1;for(ll i=1;i<=n;i++){sum+=i;for(ll j=0;j<=sum;j++){f[i][j]=f[i-1][abs(j-i)]+f[i-1][j+i];}}printf("%lld",f[n][0]/2);
}
T3:循环数 RunaroundNumbersRunaround NumbersRunaroundNumbers
评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1467
题目大意
求比n大的第一个循环数(循环数就是每到达一个数字就往前走这个数字的步数,然后每个数字都走过一次)
解题思路
直接暴力往后加,然后看一下是不是循环数。
code
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,now,k[10],a[10];
bool check(int x)
{memset(k,0,sizeof(k));int tmp=x,w=0;while(tmp){w++;a[w]=tmp%10;if(k[a[w]]) return false;k[a[w]]=true;tmp/=10;}for(int i=1;i<=w/2;i++)swap(a[i],a[w-i+1]);memset(k,0,sizeof(k));tmp=1;for(int i=1;i<=w;i++){if(k[a[tmp]]||!a[tmp]) return false;k[a[tmp]]=true;tmp=(tmp+a[tmp]-1)%w+1;}if(tmp!=1) return false;return true;
}//判断循环数
int main()
{scanf("%d",&n);now=n;while(true){now++;if(check(now)){printf("%d",now);break;}}
}
T4:派对灯 PartyLampsParty LampsPartyLamps
评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1468
题目大意
有n个灯
有4种操作:
1.灯开着就关,关了就开
2.奇数号的取反
3.偶数号的取反
4.3k+1的灯取反
给出操作次数和某些灯的最终状态,求所有可能的状态
解题思路
我们可以发现其实灯就是6个一个的循环节。
然后一个东西操作过2次就没有用,然后1和2,3就等于按另一个
我们可以预处理除c=2可以做到的所有情况,然后c>2时也可以做到c=2时的效果
code
#include<cstdio>
using namespace std;
const int s[8]={0,14,21,27,36,42,49,63};//预处理可以做到的情况
int n,c,open,close,a[6],x;
bool flag;
void check(int x)
{if((s[x]&open)!=open||s[x]&close) return;int tmp=s[x],i=1;while(tmp) a[6-i]=tmp%2,tmp/=2,i++;for(int i=0;i<n;i++)printf("%d",a[i%6]);flag=true;printf("\n");
}//判断这种情况是否满足
int main()
{scanf("%d%d",&n,&c);while(scanf("%d",&x)&&x!=-1)x=6-(x-1)%6-1,open|=1<<x;//开启的等while(scanf("%d",&x)&&x!=-1)x=6-(x-1)%6-1,close|=1<<x;//关闭的灯if(c==0) check(7);if(c==1) check(0),check(2),check(3),check(5);//前两个特判if(c>=2) for(int i=0;i<=7;i++) check(i);if(!flag) printf("IMPOSSIBLE");
}
USACO2.2【统计,dp,模拟,位运算】相关推荐
- 灰度图像压缩 DP算法 位运算详解
作者码字不易,白天敲代码,晚上熬夜赶报告,要转载请注明出处哦,程序猿的辛酸泪 目录 位运算回顾 压缩过程 解压过程 关于一个莫得感情的小bug 实用小工具的下载地址 完整版代码 位运算回顾 若 a = ...
- nowcoder 多校算法寒假训练营(第二场)F 德玛西亚万岁(状压DP,位运算)
状态DP中很经典的一道题,除了从牛变成人之后好像就没什么变化了吧. 可以预处理出同一行内不会相邻的所有状态. 地图的每一行的01互换后,用一个数字储存. 对于每一个状态,若其与地图&运算的结果 ...
- USACO 2.1 海明码 Hamming Codes (模拟+位运算+黑科技__builtin_popcount(n))
题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位 ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp
文章目录 题目解答 题目链接 题目解答 分析: 状态压缩dp是用二进制数来表示状态. 数据范围n = 20, 那么状态总量就是2202^{20}220个状态. 可以按照以下思路去思考: 哪些点被用过 ...
- 【洛谷 P4934】 礼物 (位运算+DP)
题目链接 位运算+\(DP\)=状压\(DP\)?(雾 \(a\&b>=min(a,b)\)在集合的意义上就是\(a\subseteq b\) 所以对每个数的子集向子集连一条边,然后答案 ...
- [CodeForces gym 102956 D] Bank Security Unification(位运算优化dp)
problem cf链接 solution 读完题先直接暴力 dpdpdp 拿出来,dpi=maxj<i{dpj+(fi&fj)}dp_i=\max_{j<i}\big\{dp_ ...
- USACO2.1【bfs,排序,贪心,dfs,位运算】
前言 开始刷USACO的题了. 正题 刷前必备技能:OI常识,bfs,dfs,位运算,基础贪心,快速排序. T1:城堡 TheCastleThe CastleTheCastle 评测记录: https ...
- 2021牛客暑期多校训练营5 E-Eert Esiwtib(树形dp+位运算)
E-Eert Esiwtib 位运算考虑贡献时分0/1按位模拟考虑 fu,0/1/2f_{u,0/1/2}fu,0/1/2表示子树u中点(包括u)到u所有路径的或/与/异或值. 转移的时候我们要考虑 ...
- bzoj5108 [CodePlus2017]可做题 位运算dp+离散
[CodePlus2017]可做题 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 87 Solved: 63 [Submit][Status][D ...
最新文章
- 倒计时 8 天 | 完整议程大揭秘!来 20 个 AI 论坛,与百名大咖携手玩转人工智能...
- html地图自动适合窗口,【整理】用html和javascript实现类似百度地图的画布
- boost::geometry::reverse_dispatch用法的测试程序
- jdbc 连接 Oracle 进行基本的增删改查
- 用于查看编程代码的软件_当您创建用于学习编程的软件时,最重要的用户是您
- openstack 在线repo
- mybatis plus关联查询_Mybatis 和 Hibernate 持久层框架之间的区别是啥?
- 微软发布Visual Studio 2010 SP1公测版
- FatFs源码剖析(转)
- yarn 常用命令(干干货!)
- spark dataframe常用操作集锦
- 设计模式系列 — 模板方法模式
- jQuery API中文手册详解
- PMP课程笔记:第7章 项目成本管理
- ERROR 1356 (HY000): View 'information_schema. SCHEMATA'
- bootstrap案例解析
- CDH6.2.1安装Kudu maste无法启动 Unable to initialize catalog manager
- 笔记本电脑的应用、维护、采购全攻略
- 使用highcharts做地图统计
- swiper中ajax获取数据不能滑动问题
热门文章
- 传递集合对象_面试必备——Java集合框架
- 机器人J中WPR_优傲:协作机器人的未来在哪里?
- 客制化键盘编程_指尖运动会,谁是打字冠军,双十一机械键盘推荐
- shapenet网络_GRNet网络:3D网格进行点云卷积,实现点云补全
- java实用教程——常用实用类——String类(字符串类)
- 二叉树最近公共祖先相关题目(Leetcode题解-Python语言)
- Divide and Sum CodeForces - 1445D(排列组合+逆元)
- Harmonic Number (II) LightOJ - 1245(找规律?大数f(n)=n/1+n/2+n/3+......+n/n)
- 彩光和灰光模块_5G承载网主要光模块图谱
- 迁移到其他机器_有赞大数据离线集群迁移实战