Ural 1495
来源:互联网 发布:mysql将null转为0 编辑:程序博客网 时间:2024/06/07 23:49
PRO IS HERE
题目大意就是问是否存在长度小于31的仅有1,2组成的数,整除n。若有,输出最小的。
dp[i] 表示模为i的最小的数。
考虑(1<<31) 不用高精度。
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<set>#include<queue>#include<map>#include<iostream>using namespace std;#define FOR(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)#define DOR(i,a,b) for(int (i)=(a);(i)>=(b);(i)--)#define bug puts("Fuck");#define LL long long#define pb push_back#define mp make_pair#define nMax 1010000#define eps 1e-8#define inf 0x7fffffffLL dp[2][nMax];int mod[31];int n;void init(){int t=1;mod[1]=1;for(int i=2;i<31;i++){mod[i] = mod[i-1]*10%n;}}int main(){#ifndef ONLINE_JUDGEfreopen("input.txt","r",stdin);//freopen("output.txt","w",stdout);#endifwhile(~scanf("%d",&n)){ init(); memset(dp,-1,sizeof(dp)); dp[0][0]=0; int cur=1; for(int i=0;i<30;i++){ memset(dp[cur],-1,sizeof(dp[cur])); for(int j=0;j<n;j++)if(dp[cur^1][j]!=-1){ for(int k=1;k<3;k++){ int t=(j+k*mod[i+1])%n; if(dp[cur][t]==-1 || dp[cur][t] > dp[cur^1][j]+((k-1)<<(i+1))) dp[cur][t]=dp[cur^1][j]+((k-1)<<(i+1)); } } if(dp[cur][0]!=-1) { int step=i+2; while(step-->1){ printf("%d",((dp[cur][0]&(1<<step))!=0)+1); } printf("\n"); return 0; } cur^=1; } printf("Impossible\n");}return 0;}
- Ural 1495
- URAL
- 【ural】
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- URAL
- CATT在SAP系统中的应用
- 怎样设置eclipse注释的字体大小
- rlwrap 的安装使用(实现sqlplus下命令行history编辑)
- Oracle创建用户及删除用户的实例
- 循环查询 树形结构
- Ural 1495
- NSUserDefaults
- 使用SSH客户端远程登录Linux主机(可替代samba、ftp服务)
- AutoExcuteJob Framework(一)如何构建,部署 Windows Service
- CentOS与Ubuntu命令中的不同之处
- 如何实现Tomcat连接池数据库密码加密
- Eink电子书--博阅G10二代 使用感想
- PDO操作笔记
- 网站UI设计应具有的8大品质和特点--摘自《众妙之门--网站UI设计之道》