有趣的思路题集锦from bzoj/codefoces(乱搞)
来源:互联网 发布:ug8.0编程实例 编辑:程序博客网 时间:2024/04/23 18:24
1、题目:Codefoces #371C
Hamburgers
题解:
没有想到二分的我代码写的冗长而且是错的。。。
即使只有三个也很难枚举清楚呢
二分可以很好解决啦
代码:
#include <cstdio>#include <cstring>#include <iostream>#define LL long longusing namespace std;LL l=0,r=2e12,rr,b=0,s=0,c=0,i,nb,ns,nc,pb,ps,pc;char st[105];int main(){ scanf("%s",&st); int ll=strlen(st); for (int i=0;i<ll;i++) if (st[i]=='B') b++; else if (st[i]=='S') s++; else c++; scanf("%I64d%I64d%I64d%I64d%I64d%I64d%I64d",&nb,&ns,&nc,&pb,&ps,&pc,&rr); while (l<=r) { LL mid=(l+r)>>1; LL x=max(0ll,b*mid-nb),y=max(0ll,s*mid-ns),z=max(0ll,c*mid-nc); LL f=x*pb+y*ps+z*pc; if (f<=rr) l=mid+1;else r=mid-1; } printf("%I64d",l-1);}
=========
2、题目:BZOJ 2456
Mode
题解:
把数字们对对碰,因为是众数的话肯定能碰掉其他所有的数字啊
代码:
#include <cstdio>#include <algorithm>using namespace std;int main(){ int n,i,wh,x,cnt=0; scanf("%d",&n); for (i=1;i<=n;i++) { scanf("%d",&x); if (cnt==0) wh=x; if (wh!=x) cnt--;else cnt++; } printf("%d",wh);}
=========
3、题目:BZOJ 3713
Iloczyn
题解:
看起来好复杂,但是我仔细一看,发现n最大竟然是1e9?
那我光把小于1e9的fib的记录下来——哇一共才44个,那就
代码:
#include <cstdio>#define LL long longusing namespace std;int i,f[560],fib[560],cnt,j;int main(){ f[0]=0; f[1]=1; fib[++cnt]=0; for (i=2;i<=50;i++) { f[i]=f[i-1]+f[i-2]; if (f[i]>1e9) break; fib[++cnt]=f[i]; } int T;LL n; scanf("%d",&T); while (T--) { scanf("%lld",&n); bool fff=0; for (i=1;i<=cnt;i++) { for (j=1;j<=cnt;j++) if ((LL)fib[i]*fib[j]==n) {printf("TAK\n");fff=1;break;} else if ((LL)fib[i]*fib[j]>n) break; if (fff) break; } if (!fff) printf("NIE\n"); }}
=========
4、题目:BZOJ 3043
IncDec Sequence
题意:
给定一个长度为n的数列{a1,a2…an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一。
问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种。
对于100%的数据,n=100000,0<=ai<2147483648
题解:
对于带有“将一段区间内的每个数全部加上某个值”这种操作的题目,通常考虑差分原数列以简化情况,将对一段区间的操作转化为对某两个特定数的操作。
我们定义
显然,题目中要求的a数列中的所有数全部相等的条件等同于使
要将d数列中第二项至第n项全部变为0并使操作次数最少,首先我们将每个负数和每个正数配对执行操作,设d数列中第2至第n项所有正数分别求和得到的值为p,负数分别求和得到的值的绝对值为q,这一步的操作次数即为min{p,q}。
此时还剩余和的绝对值为abs(p-q)的数没有变为0,每次操作我们可以将其与
清晰的图示!
代码:
#include <cstdio>#include <algorithm> #define M 100100 using namespace std; int n;long long a[M],pos,neg; int main() { int i;scanf("%d",&n); for(i=1;i<=n;i++) scanf("%lld",&a[i]); for(i=n;i>1;i--) if(a[i]-a[i-1]>0) pos+=a[i]-a[i-1]; else neg+=a[i-1]-a[i]; printf("%lld\n%lld",max(pos,neg),abs(pos-neg)+1); return 0; }
=========
5、题目:BZOJ 3725
PA2014 Final Matryca刷墙
题解:
我们可以从题目的描述来推起:“你需要用这把刷子在墙上每一个可能的位置(只要刷子不超出墙,且对准格子;共有n-k+1个位置)都刷一遍”
也就是说假如刷子长为k的话,1~n-k+1的颜色必须一样,类推一下就是i~n-k+i的颜色都要是一样的。也就是说在这个区间内,要不是*号,要不就是颜色全都一样
那我们只要求出符合这要求的所有区间的min值就是n-k+1的值啦
代码:
#include <cstdio>#include <cstring>#include <iostream>using namespace std;char st[1000005],last;int main(){ int i,now; scanf("%s",st);int l=strlen(st); int minn=l; for (i=0;i<l;i++) if (st[i]!='*') { if (!last) last=st[i],now=i; else if (last!=st[i]) { minn=min(minn,i-now); last=st[i]; now=i; }else now=i; } printf("%d",l-minn+1);}
=========
6、题目:Codefoces #354B
Pyramid of Glasses
题解:
看上去就很害怕
这个t的时间就是告诉你有多少水
但是仔细想想就会发现好像和杨辉三角有什么关系,因为一个瓶子里的水溢出来的话只会溢到a[i+1][j]和a[i+1][j+1]的瓶子里
每次还是只溢出来上次的二分之一,当然要先给上边桶留上1啊
代码:
#include <cstdio>using namespace std;double a[15][15];int main(){ int n,t,i,j; scanf("%d%d",&n,&t); a[1][1]=t;int ans=0; for (i=1;i<=n;i++) for (j=1;j<=i;j++) if (a[i][j]>=1) { ans++; a[i+1][j]+=(a[i][j]-1)/2.0; a[i+1][j+1]+=(a[i][j]-1)/2.0; } printf("%d",ans);}
- 有趣的思路题集锦from bzoj/codefoces(乱搞)
- [乱搞 思路题] BZOJ 2722 [Violet 5]爱的花环
- Codefoces 520C DNA Alignment 乱搞题
- [思路题 乱搞] BZOJ 4377 [POI2015]Kurs szybkiego czytania
- 两道有趣的算法题(只有思路)
- bzoj 2456: mode (乱搞)
- 【bzoj 2456】mode(乱搞)
- BZOJ-2118 墨墨的等式(好题) 最短路+乱搞
- bzoj有趣的题目
- BZOJ-1011 遥远的行星 乱搞+估
- BZOJ[1192]鬼谷子的钱袋 乱搞
- [BZOJ 4300] 绝世好题 · 乱搞
- 【bzoj 1002】[FJOI2007]轮状病毒(乱搞+结论)
- bzoj 2086: [Poi2010]Blocks (乱搞)
- bzoj 1303: [CQOI2009]中位数图 (乱搞)
- *【bzoj 1121】激光发射器SZK(乱搞)
- Codeforces 232A Cycles 比较有趣的思路题
- NOI 2010 COGS 468 BZOJ 2006 超级钢琴 RMQ 堆 => 乱搞 (脑洞要大大的)
- JPA 主键@Id、@IdClass、@Embeddable、@EmbeddedId
- 面试问题
- 宏和函数小记
- 大数据未来应用7大趋势 人工智能只占其一
- 下一步
- 有趣的思路题集锦from bzoj/codefoces(乱搞)
- 鸡的选择问题--回溯法
- while,do-while,for循环特点区分
- 欢迎使用CSDN-markdown编辑器
- scrollTop回到顶部详解
- 常用的字符串工具类
- 在linux系统中怎么样查找到大文件?
- 基于衍射的薄膜望远镜相比于反射式望远镜的优缺点
- 网络请求之HttpURLConnection 简述