151014总结
2015-10-14 15:46
357 查看
T1
开考后2min,由于看错范围,写了个大暴力。。写完才发现范围看错了
想了好久只想到贪心,然后写了个对拍,统计下错误率大概7.5%
管他的先去T2T3
T2
要求求出矩阵中某个定值有多少个
考场上维护前缀和序列,维护多项式的积,由于数字很小可以扔进一个桶里
然后写了个对拍 最后90分,因为没特判0
T3
看到题完全没想法,然后写暴力写到一半发现有很多多余的操作
果断开始乱搞
1.假如一个操作出现了很多次,后面的无视掉
2.每次出现一个约数,如果随机很多个数都没有这个约数的话也无视掉
然后写了一个程序,发现效果并不是那么好
继续乱搞,假如我随机20个序列里面的数,把约数全部提出来,然后存起来去重,效果应该不错?
由于指定约数至少出现一半,我可以把这些全部存起来然后挨个验证
由于2*3*5*7*...*37>10^12,所以约数个数不会超过12,20个数约数总数不会太多
那么乱搞算法来了:map对约数去重,随机20个数,挨个取约数然后挨个验证
然后写程序,发现效果真的很不错,但是有些构造数据会卡住
那么再加个优化,如果这个数大于10^12直接不要了,结果瞬间过掉构造数据
后面又写了一些小优化,然后强大的构造数据都卡不掉我。最后100分
考完后:卧槽,表算也是这个思想!吓尿了
回到T1,没时间了,写拼程序吧
最终90+90+100,给我的启发就是乱搞+优化是可行的
附上代码
T1
开考后2min,由于看错范围,写了个大暴力。。写完才发现范围看错了
想了好久只想到贪心,然后写了个对拍,统计下错误率大概7.5%
管他的先去T2T3
T2
要求求出矩阵中某个定值有多少个
考场上维护前缀和序列,维护多项式的积,由于数字很小可以扔进一个桶里
然后写了个对拍 最后90分,因为没特判0
T3
看到题完全没想法,然后写暴力写到一半发现有很多多余的操作
果断开始乱搞
1.假如一个操作出现了很多次,后面的无视掉
2.每次出现一个约数,如果随机很多个数都没有这个约数的话也无视掉
然后写了一个程序,发现效果并不是那么好
继续乱搞,假如我随机20个序列里面的数,把约数全部提出来,然后存起来去重,效果应该不错?
由于指定约数至少出现一半,我可以把这些全部存起来然后挨个验证
由于2*3*5*7*...*37>10^12,所以约数个数不会超过12,20个数约数总数不会太多
那么乱搞算法来了:map对约数去重,随机20个数,挨个取约数然后挨个验证
然后写程序,发现效果真的很不错,但是有些构造数据会卡住
那么再加个优化,如果这个数大于10^12直接不要了,结果瞬间过掉构造数据
后面又写了一些小优化,然后强大的构造数据都卡不掉我。最后100分
考完后:卧槽,表算也是这个思想!吓尿了
回到T1,没时间了,写拼程序吧
最终90+90+100,给我的启发就是乱搞+优化是可行的
附上代码
T1
//Copyright(c)2015 liuchenrui #include<cstdio> #include<ctime> #include<iostream> #include<algorithm> #include<cstring> #define ll long long using namespace std; ll n; int c[66]; long long ans; long long p,q; ll a[55],b[55],t1,t2; bool used[55]; char s[55]; void bf() { for(int i=1;i<=(1<<(n<<1));i++) { int t=1; while(c[t]==1) { c[t]=0; t++; } c[t]=1; int ans1=0,ans2=0; for(int j=1;j<=(n<<1);j++) { if(c[j]==1)ans1++; else ans2++; } if(ans1!=ans2)continue; long long k1=0,k2=0; for(int j=1;j<=(n<<1);j++) { if(c[j]==1)k1=k1*10+s[j]-'0'; else k2=k2*10+s[j]-'0'; } if(k1+k2>ans)p=k1,q=k2; ans=max(ans,k1+k2); } cout<<ans<<endl; //cout<<p<<" "<<q<<endl; exit(0); } int main() { freopen("hello.in","r",stdin); freopen("hello.out","w",stdout); scanf("%I64d%s",&n,s+1); if(n<=10)bf(); a[++t1]=s[1]-'0'; int now=1; while(t1<n && t2<n) { ll k1=0,k2=0; for(ll i=now+1;i<=now+n-t1+1;i++) { if(s[i]-'0'>k1)k1=s[i]-'0',k2=i; } b[++t2]=s[k2]-'0'; for(ll i=now+1;i<=k2-1;i++)a[++t1]=s[i]-'0'; now=k2; } for(ll i=now+1;i<=(n<<1);i++) { if(t1!=n)a[++t1]=s[i]-'0'; else b[++t2]=s[i]-'0'; } ll ans1=0,ans2=0; for(ll i=1;i<=n;i++)ans1=ans1*10+a[i]; for(ll i=1;i<=n;i++)ans2=ans2*10+b[i]; cout<<ans1+ans2<<endl; //cout<<ans1<<" "<<ans2<<endl; }T2
//Copyright(c)2015 liuchenrui #include<cstdio> #include<ctime> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #define ll long long using namespace std; int ton[40000]; int ty[40000]; int n,k; char s[4005]; ll ans; int main() { freopen("rect.in","r",stdin); freopen("rect.out","w",stdout); scanf("%d\n%s",&k,s+1); n=strlen(s+1); for(int i=1;i<=n;i++) { int now=0; for(int j=i;j<=n;j++) { now+=s[j]-'0'; ton[now]++; } } if(k==0) { ll sum=0; for(int i=1;i<=n;i++)ty[i]=ty[i-1]+s[i]-'0'; for(int i=1;i<=n;i++) for(int j=0;j<i;j++) if(ty[i]-ty[j]==0)sum++; for(int i=1;i<=n;i++) for(int j=0;j<i;j++) { ans+=2*sum; if(ty[i]-ty[j]==0)ans-=sum; } cout<<ans; return 0; } int w=(int)sqrt(k); for(int i=1;i<=w;i++) { if(k%i==0 && k/i<=36000 && k/i!=i)ans+=((ll)((ll)ton[i]*(ll)ton[k/i])<<1ll); if(k%i==0 && k/i<=36000 && k/i==i)ans+=(ll)((ll)ton[i]*(ll)ton[k/i]); } cout<<ans<<endl; }T3
//Copyright(c)2015 liuchenrui #include<cstdio> #include<ctime> #include<iostream> #include<algorithm> #include<cstring> #include<map> #include<cmath> #define ll long long using namespace std; inline void R(ll &v) { v=0;char c=0;ll p=1; while(c<'0' || c>'9'){if(c=='-')p=-1;c=getchar();} while(c>='0' && c<='9'){v=(v<<3)+(v<<1)+c-'0';c=getchar();} v*=p; } bool isp[1000010]; bool searched[1000010]; ll a[100010]; ll n; map<ll,ll>mp; void ser(ll x) { //cerr<<x<<endl; if(x<=1000000 && searched[x])return; if(x<=1000000)searched[x]=1; ll ret=0; for(ll i=1;i<=n;i++) { if(a[i]%x==0)ret++; } if((ret<<1)<n)return; mp.insert(make_pair(x,1)); for(map<ll,ll>::iterator it=mp.begin();it!=mp.end();++it) { if(x*(it->first)>=1000000000000ll)break; mp[x*(it->first)]=1; } } bool S(ll x) { ll ret=0; for(ll i=1;i<=n;i++) { if(a[i]%x==0)ret++; } if((ret<<1)<n)return false; return true; } int main() { freopen("half.in","r",stdin); freopen("half.out","w",stdout); srand(time(0)); memset(isp,true,sizeof isp); isp[1]=false; for(ll i=2;i<=1000000;i++) { if(isp[i]) for(ll j=i<<1;j<=1000000;j+=i)isp[j]=false; } R(n); for(ll i=1;i<=n;i++)R(a[i]);//cerr<<clock()<<endl; for(ll i=1;i<=20;i++) { ll x=rand()%n+1;x=a[x]; ll maxx=(ll)sqrt(x); for(ll i=2;i<=maxx;i++) { if(x%i==0) { ser(i); x/=i; maxx=(ll)sqrt(x); i--; } } ser(x); } //cerr<<clock()<<endl; //cerr<<mp.size()<<endl; ll ans=1; for(map<ll,ll>::iterator it=mp.begin();it!=mp.end();++it) { //cerr<<it->first<<endl; if(S(it->first))ans=(it->first); } cout<<ans<<endl; }
相关文章推荐
- Entity Framework 安装出现问题
- webform 文件上传(头像上传) 隐藏FileUpload
- 查看iis错误日志时提示找不到 freb.xsl的解决方法
- 查看当前进程,或死锁进程,并能自动杀掉死进程
- 理解OAuth
- cell的展开与闭合
- premage.js 实现预览本地上传图片
- Unity各种路径
- Qt使用问题总结
- hql group by使用 (HibernateCallback())
- ssh 免密码登录
- 连分数(continued fraction)
- 怎样编写软件文档
- 关于a标签的onclick与href的执行顺序
- swift2.0 CASpringAnimation 和 UIView.animateWithDuration 分别实现弹性动画
- ubuntu防火墙设置
- ASP.NET查找指定文件夹下的末级子目录
- 错题集---Could not find a storyboard named 'main' in bundle NSBundle
- android ecilpse中使用color资源
- Android 长按Listview显示CheckBox,实现批量删除