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相关推荐

  1. html中section与div,如何在html中的section标签内包含div标签

    我正在制作一个完整版块的页面网站,如this.每个页面都有自己的标签.目前我的网页有4个部分(呈现不同的背景颜色).如何在html中的section标签内包含div标签 我的第一部分有一个容器div, ...

  2. LATEX 在section层级目录上也加上虚线

    只添加\tableofcontent会导致section层级目录上没有虚线 可以在tex文件一开始先加上下面这句话: \titlecontents{section}[0pt]{\addvspace{5 ...

  3. HTML5新元素section和article的区别详解

    HTML5带出了一系列新元素,并且将在未来被广泛应用.然而,有一些元素在使用时易被混淆,包括以下两个新元素:<article>和<section>. 在问答网站经常可以看到别人 ...

  4. (转).net webconfig使用IConfigurationSectionHandler自定section

    自定义配置结构 (使用IConfigurationSectionHandler)  假设有以下的配置信息,其在MyInfo可以重复许多次,那么应如何读取配置呢?这时就要使用自定义的配置程序了. < ...

  5. 【PHPWord】页面Section

    require_once 'PHPWord.php';$PHPWord = new PHPWord();//默认页面 $section = $PHPWord->createSection(arr ...

  6. 洛谷P1182 数列分段Section II 二分答案

    洛谷P1182 数列分段Section II 二分答案 题意:将 n 个 数 分为 m段 求一种方案,使这m段中最大的和 最小 额..可能有点拗口,其实就是说每一种方案,都有对应的 每段和的最大值, ...

  7. ConfigParser MissingSectionHeaderError: File contains no section headers.

    今天使用ConfigParser解析一个ini文件,报出如下错误: config.read(logFile)File "C:\Python26\lib\ConfigParser.py&quo ...

  8. T100 section已经修改过

    2019独角兽企业重金招聘Python工程师标准>>> T100的开发会碰到没有勾选修改程序框架,程序咨询显示已经被修改过 原因是: 上传签入之后我们再签出的时候就会有section ...

  9. 汇编中的.section命令及汇编语言程序都至少声明的3个段

    汇编语言中最重要的命令之一是.section命令.这个命令定义内存段,汇编语言程序在其中定义元素.所有汇编语言程序都至少具有3个必须声明的段落: ·数据段 ·bss段 ·文本段 数据段用于声明为程序存 ...

  10. elf section类型_ELF文件解析(一):Segment和Section

    ELF 是Executable and Linking Format的缩写,即可执行和可链接的格式,是Unix/Linux系统ABI (Application Binary Interface)规范的 ...

最新文章

  1. 阿里达摩院百万大奖评选开启!这次人人都能给青年科学家当伯乐
  2. CDOJ1633 Video Game Combos [AC自动机+dp]
  3. html文本长度不一样的对齐,关于html:文本在中间不对齐
  4. Python、Java、TypeScript 和 Perl 作者谈语言设计
  5. 【FPGA Verilog】实验二:key按键基础实验
  6. JAVA入门级教学之(for循环)
  7. python遍历二维数组_在Python中遍历二维数组?
  8. Oracle JOB异常中断原因分析
  9. 2018百度之星程序设计大赛 - 资格赛 P1006三原色图(MST,并查集)
  10. Android中的Menu(菜单)的三种类型菜单的学习
  11. M25F1 4G全网通终端的技术应用
  12. 【VScode技巧】:VScode界面显示模糊
  13. 医院html完整页面设计代码,医院HTML5模板
  14. 用php实现加减乘除计算器,利用php怎么编写一个加减乘除计算器
  15. 中创|又临双11淘宝崩了,中心化存储难以支撑
  16. 手游测试工具-脚本精灵
  17. 抽象代数之A3是S3的全不变子群
  18. “买家秀“与“卖家秀”
  19. SQL server 数据库视频总结
  20. RocEDU.阅读.写作《苏菲的世界》书摘(四)

热门文章

  1. 如何将Eclipse中Web项目打成war包
  2. 如何把你的图标转换成WEB字体
  3. 仅对 LINQ to Entities 中已排序的输入支持方法“Skip”。必须在调用“Skip”方法之前调用方法“OrderBy”
  4. QA: c# IHttpFactory配置代理或者HttpClient配置代理
  5. Python 帮助信息(pydoc模块)
  6. BigDecimal 加减乘除及对比
  7. 代码一致性 java_java实现一致性hash算法实例代码
  8. jso java_Javaweb学习之JSON使用
  9. parquet格式_数据工程101:揭开Hadoop数据格式的神秘面纱:Avro,ORC和Parquet
  10. JavaWeb:生成简单随机图片验证码返回给客户端