【XSY1522】灯 乱搞
来源:互联网 发布:交通违章查询软件下载 编辑:程序博客网 时间:2024/06/05 06:04
题目大意
现在依次对于
输出任意一种方案即可
题解
我们可以把灯的编号减
先用线性筛把质数筛出来
如果对于每一个质数都指定编号
所以我们的目标是点亮
我们要找两个质数
但是我们会发现n比较小时这个方法有时候会找不到答案,我们只需要写一个暴搜把
我也不知道第
代码
#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<ctime>#include<utility>using namespace std;typedef long long ll;typedef pair<int,int> pii;int p[1000010];int b[1000010];int cnt;int a1[1000010];int a2[1000010];int a[1000010];int cnt1,cnt2;int ans[1000010];int c[1000010];int d[1000010];int n;int tcnt;void dfs(int x){ if(x>cnt) { int i; for(i=1;i<=n;i++) if(!a[i]) return;// printf("printf(\"%d %d\\n",tcnt,n);// for(i=1;i<=tcnt;i++)// printf("%d\\n",ans[i]);// printf("\");"); printf("%d %d\n",tcnt,n); for(i=1;i<=tcnt;i++) printf("%d\n",ans[i]); exit(0); } int i,j; for(i=1;i<=n;i++) if(a[i]) { int s=0; for(j=i;j<=n;j+=p[x]) { s+=!a[j]; a[j]++; } for(j=i-p[x];j>=1;j-=p[x]) { s+=!a[j]; a[j]++; } ans[x]=i; if(s) dfs(x+1); for(j=i;j<=n;j+=p[x]) a[j]--; for(j=i-p[x];j>=1;j-=p[x]) a[j]--; }}int main(){// freopen("light.in","r",stdin);// freopen("light.out","w",stdout); scanf("%d",&n); memset(b,0,sizeof b); int i,j; cnt=0; for(i=2;i<=n;i++) { if(!b[i]) p[++cnt]=i; for(j=1;j<=cnt&&i*p[j]<=n;j++) { b[i*p[j]]=1; if(i%p[j]==0) break; } } tcnt=cnt; if(n<=50) { memset(a,0,sizeof a); a[1]=1; if(p[cnt]==n) { ans[cnt]=1; cnt--; } dfs(1); printf("%d %d\n",tcnt,n-1); for(i=1;i<=tcnt;i++) printf("1\n"); return 0; } printf("%d ",tcnt); if(p[cnt]==n) { ans[cnt]=1; cnt--; } n--; memset(a,0,sizeof a); int cnt3=0; for(i=1;i<=cnt;i++) { if(ll(p[i])*p[i]<=n) a1[++cnt1]=p[i]; else { a2[++cnt2]=p[i]; d[++cnt3]=p[i]; } ans[i]=1; } for(i=1;i<=cnt1;i++) { ans[i]=1; for(j=a1[i];j<=n;j+=a1[i]) a[j]++; } for(i=1;i<=cnt2;i++) c[a2[i]-1]=i; int x=0; for(i=cnt2;i>=1;i--) { for(j=a2[i];j<=n;j+=a2[i]) if(c[j]&&a2[i]+j<=n-2) { x=i; ans[i+cnt1]=a2[i]+2; ans[c[j]+cnt1]=a2[i]+j+2; break; } if(x) break; } printf("%d\n",n+1); for(i=1;i<=tcnt;i++) printf("%d\n",ans[i]); return 0;}
阅读全文
0 0
- 【XSY1522】灯 乱搞
- 乱搞
- 乱搞
- qbxt Day 4 乱搞+乱搞+乱搞
- BZOJ4104【乱搞】
- 乱搞题
- 树上乱搞
- 乱搞hash
- 乱搞题
- 代码乱搞
- 乱搞 寿司
- BZOJ4121 乱搞
- 乱搞题目
- qbxt Day 1 乱搞+乱搞+DP
- HDU1538------水题,乱搞之
- hdu4618Palindrome Sub-Array(乱搞)
- hdu4714 Tree2cycle 树上乱搞
- HDU 5042 分段乱搞
- Leetcode-23: Merge k Sorted Lists
- 欢迎使用CSDN-markdown编辑器
- 严重: Compilation error org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
- Objective-C中的@synthesize和@dynamic
- electron 环境部署
- 【XSY1522】灯 乱搞
- App的分类
- 树的最小支配集,最小点覆盖,最大独立集两种算法
- 开发一个iOS应用没有那么容易
- 通过JMX访问Spring的Bean
- zookeeper与dubbo结合实例
- 请求报文、相应报文
- CSS基础(一)
- discuzX3.2去掉titlePowered by Discuz!