[bzoj2665] [cqoi2012]编号

  首先有一个直观暴力的想法..

  枚举每个数,如果这个数可行的话,就加进答案里,然后把和它超过4个位置相同的数去掉。

  然后正解真的是这个>_<

  假设取到了数x,只要和x有5位相同的数就可以排除掉..

  暴力C(7,5)=21种枚举那5个位置是啥,f[id][i][j][k][a][b]表示第id种位置,5个位置上的数是i,j,k,a,b,是否被已排除。

  一个数可行的话,就得21种位置上的数都没被排除。

  这复杂度竟然能过....O(16^7)

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #define ll long long
 6 #define d double
 7 using namespace std;
 8 const int maxn=200233;
 9 bool f[21][17][17][17][17][17];
10
11 int ra;char rx;
12 inline int read(){
13     rx=getchar(),ra=0;
14     while(rx<‘0‘||rx>‘9‘)rx=getchar();
15     while(rx>=‘0‘&&rx<=‘9‘)ra*=10,ra+=rx-48,rx=getchar();return ra;
16 }
17 inline void outx(int i,int j,int k,int l,int a,int b,int c){
18     int v[16]={‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘};
19     printf("%c%c%c%c%c%c%c\n",v[i],v[j],v[k],v[l],v[a],v[b],v[c]);
20 }
21 int main(){
22     int i,j,k,n;register int l,a,b,c;
23     n=read();
24     for(i=0;i<16;i++)for(j=0;j<16;j++)for(k=0;k<16;k++)for(l=0;l<16;l++)for(a=0;a<16;a++)for(b=0;b<16;b++)for(c=0;c<16;c++)
25         if(
26         !f[0][i][j][k][l][a]
27         &&!f[1][i][j][k][l][b]
28         &&!f[2][i][j][k][a][b]
29         &&!f[3][i][j][l][a][b]
30         &&!f[4][i][k][l][a][b]
31         &&!f[5][j][k][l][a][b]
32         &&!f[6][i][j][k][l][c]
33         &&!f[7][i][j][k][a][c]
34         &&!f[8][i][j][l][a][c]
35         &&!f[9][i][k][l][a][c]
36         &&!f[10][j][k][l][a][c]
37         &&!f[11][i][j][k][b][c]
38         &&!f[12][i][j][l][b][c]
39         &&!f[13][i][k][l][b][c]
40         &&!f[14][j][k][l][b][c]
41         &&!f[15][i][j][a][b][c]
42         &&!f[16][i][k][a][b][c]
43         &&!f[17][j][k][a][b][c]
44         &&!f[18][i][l][a][b][c]
45         &&!f[19][j][l][a][b][c]
46         &&!f[20][k][l][a][b][c]
47         ){
48             n--;
49             if(!n){outx(i,j,k,l,a,b,c);return 0;}
50             f[0][i][j][k][l][a]
51             =f[1][i][j][k][l][b]
52             =f[2][i][j][k][a][b]
53             =f[3][i][j][l][a][b]
54             =f[4][i][k][l][a][b]
55             =f[5][j][k][l][a][b]
56             =f[6][i][j][k][l][c]
57             =f[7][i][j][k][a][c]
58             =f[8][i][j][l][a][c]
59             =f[9][i][k][l][a][c]
60             =f[10][j][k][l][a][c]
61             =f[11][i][j][k][b][c]
62             =f[12][i][j][l][b][c]
63             =f[13][i][k][l][b][c]
64             =f[14][j][k][l][b][c]
65             =f[15][i][j][a][b][c]
66             =f[16][i][k][a][b][c]
67             =f[17][j][k][a][b][c]
68             =f[18][i][l][a][b][c]
69             =f[19][j][l][a][b][c]
70             =f[20][k][l][a][b][c]
71             =1;
72         }
73 }

时间: 2024-11-05 19:28:01

[bzoj2665] [cqoi2012]编号的相关文章

[LuoguP4222][CQOI2012]编号

题目描述 你需要给一批商品编号,其中每个编号都是一个7 位16 进制 数(由0~9, a-f 组成). 为了防止在人工处理时不小心把编号弄错,要求任意两个编 号至少有三个位置对应的数字不相同. 第一个编号为"0000000",第二个编号为不违反上述规定 的前提下最小的编号,-,每次分配一个新编号时,总是选 择不和前面编号冲突的最小编号(注意编号都是16 进制数, 可以比较大小). 按此规律,前面若干编号分别是: 0000000,0000111,0000222,-,0000fff,000

【BZOJ2666】[cqoi2012]组装 贪心

[BZOJ2666][cqoi2012]组装 Description 数轴上有m个生产车间可以生产零件.一共有n种零件,编号为1~n.第i个车间的坐标为xi,生产第pi种零件(1<=pi<=n).你需要在数轴上的某个位置修建一个组装车间,把这些零件组装起来.为了节约运输成本,你需要最小化cost(1)+cost(2)+…+cost(n),其中cost(x)表示生产第x种零件的车间中,到组装车间距离的平方的最小值. Input 输入第一行为两个整数n, m,即零件的种类数和生产车间的个数.以下m

输入password登录到主界面,录入学生编号,排序后输出

n 题目:输入password登录到主界面,录入学生编号,排序后输出 n 1.  语言和环境 A.实现语言 C语言 B.环境要求 VC++ 6.0 n 2.  要求 请编写一个C语言程序.将若干学生编号按字母顺序(由小到大)输出. 程序的功能要求例如以下: 1)  输入password"admin",正确则进入主界面,错误则直接推出(exit(0)): 2)从键盘输入5个学生编号"BJS1001","BJS2001"."BJS1011&

CSS3每日一练之内容处理-嵌套编号

出处:http://www.w3cfuns.com/thread-5592229-1-17.html 1.大标题一   1.子标题   2.子标题   3.子标题2.大标题二   1.子标题   2.子标题3.大标题三   1.子标题   2.子标题   3.子标题 这种问题,你可能会觉得直接定义两个计数器,分别编号不就行了,于是就写出了如下代码: <!DOCTYPE HTML> <html> <head> <meta charset="gb2312&q

IOS-根据ip获取当前城市的编号

IOS 通过ip地址获取当前城市的编号 //解析网址通过ip 获取城市天气代码    NSURL *url = [NSURL URLWithString:@"http://61.4.185.48:81/g/"];        //    定义一个NSError对象,用于捕获错误信息    NSError *error;    NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8Stri

IP unnumbered interface,某个接口不编号,某个接口不分配IP地址

OSPFv2中,提到点到点链路可以是unnumbered,不编号,不分配IP地址 12.4.1.1.  Describing point-to-point interfaces                For point-to-point interfaces, one or more link                descriptions are added to the router-LSA as follows:                o   If the neig

Easyui的numberbox无法输入以0开头的数字编号(转载)

1.问题 项目中碰到这样一个问题,Easyui的numberbox在输入数字编号的时候不能以0开头 在我输入以0开头的数字编号后,离开输入框的时候,那个前缀0就自动去掉了. 接下来,我们查看API说明:在input框里加上 prefix属性  data-options="prefix:'0'"  就可以解决numberbox开头不能输入0的问题了 2.属性 该属性扩展自验证框(validatebox),下面是为数字框(numberbox)添加的属性. 名称 类型 描述 默认值 disa

有17个人围成一圈(编号为0~16),从第 0号的人开始从 1报数, 凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。 问此人原来的位置是多少号?

void main() { int a[17] = { 0 };//代表17个人,值为0代表还在,1代表离开 int baoshu = 1;//当前报数的数字,最多49 int total = 17;//当前还剩多少人在 int cur = 0;//17个人的当前人循环到的编号 while (total!=1) { if (cur == 17)//说明已经走到下一圈了,需要保证当前人的编号 { cur = 0; } if (a[cur] == 1)//说明该人已经离开圈子,报数不增加,走向下一人

[BZOJ2667][cqoi2012][kcoj]模拟工厂

题目描述 Description 有一个称为"模拟工厂"的游戏是这样的:在时刻0,工厂的生产力等于1.在每个时刻,你可以提高生产力或者生产商品.如果选择提高生产力,在下一个时刻时工厂的生产力加1:如果选择生产商品,则下一个时刻你所拥有的商品数量增加p,其中p是本时刻工厂的生产力. 有n个订单,可以选择接受或者不接受.第i个订单(ti, gi, mi)要求在时刻ti给买家提供gi个商品,事成之后商品数量减少gi,而收入增加mi元.如果接受订单i,则必须恰好在时刻ti交易,不能早也不能晚.