SRM 546 div2
来源:互联网 发布:汉仪小麦体 mac 编辑:程序博客网 时间:2024/06/05 20:19
连续3场混迹div2了,还是绿的。。。
250pt
数据比较小,可以开个数组搞。。。大的话可以用map
550pt
数据比较小,可以直接暴搜1000*1000的格子判断。。。大的话就分情况讨论吧,感觉好复杂的样纸,还容易挂掉。。。
1000pt
这题跪了。。。开始想用DP,没怎么想清楚就开始乱搞了。。。。然后浪费了30min。。。
之后改成构造,把每一位前面的d1和d2个数记记下来,然后从最低位开始找,找到最低可以开始构造的位数i,然后再判断可行不(判断如果后i位全取最大可以比N大么),如果不行,就把i的前一位+1,然后再重复操作即可,知道找到答案
其实这题不难的,写完一直过不完sample,居然是拼写错误。。。跪跪跪
然后跪system test。。。注意前导0啊。。。
//1000pt的代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<cmath>#include<set>#include<map>#include<vector>#define ll long longusing namespace std;int cc1[20],cc2[20],tot=0;ll a[25],b[1000000];void cal(ll x,int tc1,int tc2,int d1,int d2){ //cout<<x<<" "<<tc1<<" "<<tc2<<" "<<d1<<" "<<d2<<endl; if((tc1==0)&&(tc2==0)){b[++tot]=x;return;} if(tc1>0)if(d1!=0||d1==0&&x!=0)cal(x*10+d1,tc1-1,tc2,d1,d2); //前导0要除掉啊。。。 if(tc2>0)cal(x*10+d2,tc1,tc2-1,d1,d2);}ll find(ll N,ll M,int tc1,int tc2,int d1,int d2){ cal(0,tc1,tc2,d1,d2); int i,k=tc1+tc2; //for(i=1;i<=tot;i++)cout<<b[i]<<endl; for(i=1;i<=tot;i++) if(N/a[k]*a[k]+b[i]>M)break; return N/a[k]*a[k]+b[i];}class FavouriteDigits{public:long long findNext(long long N,int d1,int c1,int d2,int c2){ ll temp,k,M=N; if(d1>d2){swap(d1,d2);swap(c1,c2);} int len,i,j,x; a[0]=1; for(i=1;i<=18;i++)a[i]=a[i-1]*10; while(1) { len=1; temp=N/10; while(temp){len++;temp/=10;} cc1[len]=cc2[len]=0; for(i=len-1;i>=0;i--) { x=N/a[i]%10; cc1[i]=cc1[i+1]; cc2[i]=cc2[i+1]; //开始直接写成cc2[1],WA了好久,囧 if(x==d1)cc1[i]++; if(x==d2)cc2[i]++; } if(cc1[0]>=c1&&cc2[0]>=c2)return N; int tc1,tc2; for(i=1;i<=len;i++) { if(cc1[i]>=c1)tc1=0; else tc1=c1-cc1[i]; if(cc2[i]>=c2)tc2=0; else tc2=c2-cc2[i]; if(tc1+tc2>i)continue; //cout<<i<<endl; k=0; for(j=1;j<=tc2;j++)k=k*10+d2; for(j=1;j<=tc1;j++)k=k*10+d1; if(N/a[i]*a[i]+k<M)break; //cout<<N<<endl; return find(N,M,tc1,tc2,d1,d2); } if(i>len)i=len; N=(N/a[i]+1)*a[i]; } return -1;}};
顺便ym跟我一个房间cha了3个人的大神。。。人家的代码我都看不懂怎么cha。。。
- SRM 546 div2
- SRM 114 DIV2 [550]
- SRM 398 DIV2 [250]
- SRM 399 DIV2 [250]
- SRM 387 DIV2 [250]
- SRM 387 DIV2 [600]
- SRM 397 DIV2 [500]
- SRM 400 DIV2 [250]
- SRM 400 DIV2 [500]
- SRM 397 DIV2 [1000]
- SRM 405 DIV2
- SRM 421Div2 500
- SRM 457 Div2 500
- SRM 465(DIV1 DIV2)
- SRM 465(DIV1 DIV2)
- SRM 481 div2
- SRM 212 div2
- SRM 430 div2
- bigtable
- 未来不带任何东西就能支付 欧洲已采用指纹支付
- 实现行转列
- Oracle EBS教学视频
- android调用天气预报的webservice服务的例子
- SRM 546 div2
- struts2中的拦截器
- yarin的blog
- 控制结构
- 使用AudioTrack播放PCM音频数据(android)
- linux中link,unlink,close,fclose详解 .
- oracle 11gR2 新增deinstall命令来卸载grid和database
- GetPrivateProfileString函数简介
- Linux命令--管道 |左边的输出是右边的输入