Section 2.2
Preface Numbering
罗马数字的处理,问从1-N,各个IVX...什么的出现了多少次。
我们可以用IVX表示出1-9
XLC表示出10-90
CDM表示出100-900
统计出怎么出现的。接下来从高位往下减来表示就好了。
#include <bits/stdc++.h> using namespace std; char dir[10] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'}; int cnt[10][3]; int ans[10]; void init(){int i;for(i = 1; i < 4; i++){cnt[i][0] = i;}cnt[4][0] = cnt[4][1] = 1;cnt[5][1] = 1;for(i = 6; i < 9; i++){cnt[i][0] = i-5; cnt[i][1] = 1;}cnt[9][0] = cnt[9][2] = 1; }void gao(int x, int base){for(int i = 0; i < 3; i++){// cout<<x<<" " << cnt[x][i] <<endl;ans[base+i] += cnt[x][i];} }int main() {freopen("preface.in","r",stdin);#ifndef poifreopen("preface.out","w",stdout);#endifinit();int n, i, j, x;cin >> n;for(i = 1; i <= n; i++){x = i;if(x >= 1000){ans[6] += x / 1000;x -= (x/1000)*1000;}if(x >= 100){gao(x/100, 4);x-= (x/100)*100;}if(x >= 10){gao(x/10, 2);x-= x/10*10;}if(x>0){//printf("!!%d\n", x);gao(x, 0);}}for(i = 0 ; i <= 6; i++){if(ans[i]){cout << dir[i] <<" " << ans[i] <<endl;}}return 0; }
View Code
Subset Sums
从1-N的数分成两块使得他们各自的和相等。N<=39
可以算出所有的和。若为奇数,一定不能分成两块。
否则算出每块和后简单的背包就好了。
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1005; ll dp[N]; int main() {freopen("subset.in","r",stdin);#ifndef poifreopen("subset.out","w",stdout);#endifint n, i, j, m;cin >> n;dp[0] = 1;m = (n+1)*n/2;if(m&1) {cout << 0 <<endl;return 0;}m/=2;for(i = 1; i <= n; i++){for(j = m; j >= 0; j--){if(dp[j] && i + j <= m) {dp[j+i] += dp[j];}}}cout << dp[m] / 2<< endl; }
View Code
Runaround Numbers
http://www.wzoi.org/usaco/12%5C205.asp 题意
没想到怎么做,如果真要硬做的话估计就暴力一个个往上找。
然而居然真的是这样。。。然而不知道怎么证明为什么一定可以找到一个。感觉程序还有不完善的地方,比如应该判断当大于几位数后就结束。
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 14; bool vis[N]; char str[N]; int len = 0; int go(int now, int step){step %= len;return (now - step + len) % len; } bool gao(int x){memset(vis, false, sizeof(vis));int tp = x, i, now; len = 0;while(tp){str[len++] = tp%10;if(vis[tp%10])return false;vis[tp%10] = true;tp /= 10;}memset(vis, false, sizeof(vis));now = 0;for(int k = 1; k < len; k++){vis[now] =true;now = go(now, str[now]);if(vis[now]) return false;}now = go(now, str[now]);if(now == 0) return true;return false;}int main() {freopen("runround.in","r",stdin);#ifndef poifreopen("runround.out","w",stdout);#endifll n;cin >> n; n++;for(; ; n++){// cout << n << endl;if(gao(n)) break;}cout <<n <<endl;return 0;}
View Code
Party Lamps
N盏灯(N<=100),一开始都是开着的。有4个开关,分别可以使:全部的灯,奇数号灯,偶数号灯,3* k+1号灯改变状态。一共操作C次
给出某几盏灯必须是什么状态,求出所有的灯的状态的可能性。
可以发现对一个开关开关两次后就相当于没有动过他,所以其实一共只有2^4中情况。其余的只要c-1的个数是偶数即可以让剩余操作抵消即可。
所以暴力枚举16中情况。
当没有可行状况要输出IMPOSSIBLE
#include <bits/stdc++.h> using namespace std; const int N = 34; const int M = 104; bool ans[N][M], same[N][N]; int n, c, id = 0; bool on[M], off[M]; int f[N];void gao(int x){int one = 0, tp = x, i;while(tp){one += (tp&1);tp >>= 1;}if(c - one < 0 || ((c - one)&1)) return;// printf("%d\n", x);++id;for(i = 1; i <= n; i++) ans[id][i] = 1;if(x&1) for(i = 1; i <= n; i++) ans[id][i] ^= 1;if(x&2) for(i = 1; i <= n; i += 2) ans[id][i] ^= 1;if(x&4) for(i = 2; i <= n; i+= 2) ans[id][i] ^= 1;if(x&8) for(i = 1; i <= n; i+= 3) ans[id][i] ^= 1;//f[id] = id;for(i = 1; i <= n; i++){// printf("%d %d\n", i, ans[id][i]);if(on[i]&& !ans[id][i]){id --; return;}if(off[i]&&ans[id][i]){id--; break;}}}bool mor(int j, int k){int i;for(i = 1; i <= n; i++){if(ans[j][i] > ans[k][i]) return true;if(ans[j][i] < ans[k][i]) return false;}same[j][k] = same[k][j] = true;} int main() {freopen("lamps.in","r",stdin);#ifndef poifreopen("lamps.out","w",stdout);#endifint i, j, t;cin >> n >> c;while(cin >> t){if(t == -1) break;on[t] = true;}while(cin>>t){if(t == -1) break;off[t] = true;}int limit = (1<<4);for(i = 0; i < limit; i++){//printf("%d\n", i); gao(i);}for(i = 1; i <= id; i++)f[i] = i;for(i = 1; i <= id; i++){for(j = 1; j <= id-i; j++){if(mor(f[j], f[j+1])) swap(f[j], f[j+1]);}}for(i = 1; i <= id; i++){if(same[i][i-1]) continue;for(j = 1; j <= n; j++){printf("%d", ans[f[i]][j]);}printf("\n");}if(id == 0) printf("IMPOSSIBLE\n");return 0;}
View Code
优化:
1.有开关奇数偶数=开关全部的灯,可以继续减少情况。
2.所有的灯以6为一个循环。所以只用存6个的状态就好,这样去重也方便。
转载于:https://www.cnblogs.com/bbbbbq/p/4655959.html
Section 2.2相关推荐
- html中section与div,如何在html中的section标签内包含div标签
我正在制作一个完整版块的页面网站,如this.每个页面都有自己的标签.目前我的网页有4个部分(呈现不同的背景颜色).如何在html中的section标签内包含div标签 我的第一部分有一个容器div, ...
- LATEX 在section层级目录上也加上虚线
只添加\tableofcontent会导致section层级目录上没有虚线 可以在tex文件一开始先加上下面这句话: \titlecontents{section}[0pt]{\addvspace{5 ...
- HTML5新元素section和article的区别详解
HTML5带出了一系列新元素,并且将在未来被广泛应用.然而,有一些元素在使用时易被混淆,包括以下两个新元素:<article>和<section>. 在问答网站经常可以看到别人 ...
- (转).net webconfig使用IConfigurationSectionHandler自定section
自定义配置结构 (使用IConfigurationSectionHandler) 假设有以下的配置信息,其在MyInfo可以重复许多次,那么应如何读取配置呢?这时就要使用自定义的配置程序了. < ...
- 【PHPWord】页面Section
require_once 'PHPWord.php';$PHPWord = new PHPWord();//默认页面 $section = $PHPWord->createSection(arr ...
- 洛谷P1182 数列分段Section II 二分答案
洛谷P1182 数列分段Section II 二分答案 题意:将 n 个 数 分为 m段 求一种方案,使这m段中最大的和 最小 额..可能有点拗口,其实就是说每一种方案,都有对应的 每段和的最大值, ...
- ConfigParser MissingSectionHeaderError: File contains no section headers.
今天使用ConfigParser解析一个ini文件,报出如下错误: config.read(logFile)File "C:\Python26\lib\ConfigParser.py&quo ...
- T100 section已经修改过
2019独角兽企业重金招聘Python工程师标准>>> T100的开发会碰到没有勾选修改程序框架,程序咨询显示已经被修改过 原因是: 上传签入之后我们再签出的时候就会有section ...
- 汇编中的.section命令及汇编语言程序都至少声明的3个段
汇编语言中最重要的命令之一是.section命令.这个命令定义内存段,汇编语言程序在其中定义元素.所有汇编语言程序都至少具有3个必须声明的段落: ·数据段 ·bss段 ·文本段 数据段用于声明为程序存 ...
- elf section类型_ELF文件解析(一):Segment和Section
ELF 是Executable and Linking Format的缩写,即可执行和可链接的格式,是Unix/Linux系统ABI (Application Binary Interface)规范的 ...
最新文章
- 阿里达摩院百万大奖评选开启!这次人人都能给青年科学家当伯乐
- CDOJ1633 Video Game Combos [AC自动机+dp]
- html文本长度不一样的对齐,关于html:文本在中间不对齐
- Python、Java、TypeScript 和 Perl 作者谈语言设计
- 【FPGA Verilog】实验二:key按键基础实验
- JAVA入门级教学之(for循环)
- python遍历二维数组_在Python中遍历二维数组?
- Oracle JOB异常中断原因分析
- 2018百度之星程序设计大赛 - 资格赛 P1006三原色图(MST,并查集)
- Android中的Menu(菜单)的三种类型菜单的学习
- M25F1 4G全网通终端的技术应用
- 【VScode技巧】:VScode界面显示模糊
- 医院html完整页面设计代码,医院HTML5模板
- 用php实现加减乘除计算器,利用php怎么编写一个加减乘除计算器
- 中创|又临双11淘宝崩了,中心化存储难以支撑
- 手游测试工具-脚本精灵
- 抽象代数之A3是S3的全不变子群
- “买家秀“与“卖家秀”
- SQL server 数据库视频总结
- RocEDU.阅读.写作《苏菲的世界》书摘(四)
热门文章
- 如何将Eclipse中Web项目打成war包
- 如何把你的图标转换成WEB字体
- 仅对 LINQ to Entities 中已排序的输入支持方法“Skip”。必须在调用“Skip”方法之前调用方法“OrderBy”
- QA: c# IHttpFactory配置代理或者HttpClient配置代理
- Python 帮助信息(pydoc模块)
- BigDecimal 加减乘除及对比
- 代码一致性 java_java实现一致性hash算法实例代码
- jso java_Javaweb学习之JSON使用
- parquet格式_数据工程101:揭开Hadoop数据格式的神秘面纱:Avro,ORC和Parquet
- JavaWeb:生成简单随机图片验证码返回给客户端