正题


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,模拟,位运算】相关推荐

  1. 灰度图像压缩 DP算法 位运算详解

    作者码字不易,白天敲代码,晚上熬夜赶报告,要转载请注明出处哦,程序猿的辛酸泪 目录 位运算回顾 压缩过程 解压过程 关于一个莫得感情的小bug 实用小工具的下载地址 完整版代码 位运算回顾 若 a = ...

  2. nowcoder 多校算法寒假训练营(第二场)F 德玛西亚万岁(状压DP,位运算)

    状态DP中很经典的一道题,除了从牛变成人之后好像就没什么变化了吧. 可以预处理出同一行内不会相邻的所有状态. 地图的每一行的01互换后,用一个数字储存. 对于每一个状态,若其与地图&运算的结果 ...

  3. USACO 2.1 海明码 Hamming Codes (模拟+位运算+黑科技__builtin_popcount(n))

    题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位 ...

  4. 《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp

    文章目录 题目解答 题目链接 题目解答 分析: 状态压缩dp是用二进制数来表示状态. 数据范围n = 20, 那么状态总量就是2202^{20}220个状态. 可以按照以下思路去思考: 哪些点被用过 ...

  5. 【洛谷 P4934】 礼物 (位运算+DP)

    题目链接 位运算+\(DP\)=状压\(DP\)?(雾 \(a\&b>=min(a,b)\)在集合的意义上就是\(a\subseteq b\) 所以对每个数的子集向子集连一条边,然后答案 ...

  6. [CodeForces gym 102956 D] Bank Security Unification(位运算优化dp)

    problem cf链接 solution 读完题先直接暴力 dpdpdp 拿出来,dpi=max⁡j<i{dpj+(fi&fj)}dp_i=\max_{j<i}\big\{dp_ ...

  7. USACO2.1【bfs,排序,贪心,dfs,位运算】

    前言 开始刷USACO的题了. 正题 刷前必备技能:OI常识,bfs,dfs,位运算,基础贪心,快速排序. T1:城堡 TheCastleThe CastleTheCastle 评测记录: https ...

  8. 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所有路径的或/与/异或值. 转移的时候我们要考虑 ...

  9. bzoj5108 [CodePlus2017]可做题 位运算dp+离散

    [CodePlus2017]可做题 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 87  Solved: 63 [Submit][Status][D ...

最新文章

  1. 倒计时 8 天 | 完整议程大揭秘!来 20 个 AI 论坛,与百名大咖携手玩转人工智能...
  2. html地图自动适合窗口,【整理】用html和javascript实现类似百度地图的画布
  3. boost::geometry::reverse_dispatch用法的测试程序
  4. jdbc 连接 Oracle 进行基本的增删改查
  5. 用于查看编程代码的软件_当您创建用于学习编程的软件时,最重要的用户是您
  6. openstack 在线repo
  7. mybatis plus关联查询_Mybatis 和 Hibernate 持久层框架之间的区别是啥?
  8. 微软发布Visual Studio 2010 SP1公测版
  9. FatFs源码剖析(转)
  10. yarn 常用命令(干干货!)
  11. spark dataframe常用操作集锦
  12. 设计模式系列 — 模板方法模式
  13. jQuery API中文手册详解
  14. PMP课程笔记:第7章 项目成本管理
  15. ERROR 1356 (HY000): View 'information_schema. SCHEMATA'
  16. bootstrap案例解析
  17. CDH6.2.1安装Kudu maste无法启动 Unable to initialize catalog manager
  18. 笔记本电脑的应用、维护、采购全攻略
  19. 使用highcharts做地图统计
  20. swiper中ajax获取数据不能滑动问题

热门文章

  1. 传递集合对象_面试必备——Java集合框架
  2. 机器人J中WPR_优傲:协作机器人的未来在哪里?
  3. 客制化键盘编程_指尖运动会,谁是打字冠军,双十一机械键盘推荐
  4. shapenet网络_GRNet网络:3D网格进行点云卷积,实现点云补全
  5. java实用教程——常用实用类——String类(字符串类)
  6. 二叉树最近公共祖先相关题目(Leetcode题解-Python语言)
  7. Divide and Sum CodeForces - 1445D(排列组合+逆元)
  8. Harmonic Number (II) LightOJ - 1245(找规律?大数f(n)=n/1+n/2+n/3+......+n/n)
  9. 彩光和灰光模块_5G承载网主要光模块图谱
  10. 迁移到其他机器_有赞大数据离线集群迁移实战