[7.8] 纪中C组
来源:互联网 发布:外贸邦海关数据有用吗 编辑:程序博客网 时间:2024/06/04 22:50
这次居然重复了!
前三题都是纪中3.25普及C组的题目!
第一题
傻[嘟——]题
其实就是把俩小数对除然后快排啊。。。
但是我初评的时候居然没A
原因居然是调整精度的那0.005
#include <iostream>#include <cstdio>using namespace std;float gpt,xf,gpa[100001];int i,n,k;void qs(int l,int h){ int i=l,j=h; float mid=gpa[(l+h)/2],t; if (l>=h) return; do { while (gpa[i]>mid) i++; while (gpa[j]<mid) j--; if (i<=j) { t=gpa[i];gpa[i]=gpa[j];gpa[j]=t; i++;j--; } } while (i<=j); qs(i,h); qs(l,j);}int main(){ freopen("sort.in","r",stdin); freopen("sort.out","w",stdout); scanf("%d%d",&n,&k); for (i=1;i<=n;i++) { scanf("%f%f",&gpt,&xf); gpa[i]=gpt/xf; } qs(1,n); printf("%0.2f",gpa[k]);}
第二题
也是超级傻[嘟——]的题
线性的前缀和,于是AC
#include <iostream>#include <cstdio>using namespace std;int n,m,i,a[100001],x,y;int main(){ freopen("sum.in","r",stdin); freopen("sum.out","w",stdout); scanf("%d%d",&n,&m); for (i=1;i<=n;i++) { scanf("%d",&a[i]); a[i]+=a[i-1]; } for (i=1;i<=m;i++) { scanf("%d%d",&x,&y); printf("%d\n",a[y]-a[x-1]); }}
第三题
比较不水了
就是一波递推
把上面和左边的方法数加起来就好了
还有~~膜的~~mod一下题目要求的数量
#include <iostream>#include <cstdio>using namespace std;int n,m,p,a[101][101],f[101][101][2001],i,j,k;int main(){ freopen("count.in","r",stdin); freopen("count.out","w",stdout); scanf("%d%d%d",&n,&m,&p); for (i=1;i<=n;i++) for (j=1;j<=m;j++) scanf("%d",&a[i][j]); f[0][1][0]=1; for (i=1;i<=n;i++) for (j=1;j<=m;j++) for (k=a[i][j];k<=p;k++) { f[i][j][k]+=f[i-1][j][k-a[i][j]]+f[i][j-1][k-a[i][j]]; f[i][j][k]=f[i][j][k]%1000000007; } printf("%d",f[n][m][p]);}
第四题
其实也蛮简单的
只是初评时菜!没发挥好而已
这是一波快排和递归
快排将字符串按字典序排好
这道题可以看出要用到全排列,所以开始的时候把1到3000的全排列方式总数求出来
(当然这题也有膜的 mod的啦)
然后递归深度为字符串的指针
慢慢的拉下去,最后分解到不能再分解(深度超过最长长度时)就返回全排列的值
好难讲啊!!!!
拉下去的过程是寻找(在该深度中)不一致的字符,形成一个字符全部一致的区间,SO,这个区间就能深度加深又一波递归了
哦,还有把每个独立的区间看成一个整体,还是需要再套一次全排列的
#include <fstream>#include <string>using namespace std;int n,i,j,ml,l[3001];long long s[3001];string c[3001];void qs(int low,int high){ int i=low,j=high; string mid,t; mid=c[(low+high)/2]; if (low>=high) return; do { while (c[i]>mid) i++; while (c[j]<mid) j--; if (i<=j) { t=c[i];c[i]=c[j];c[j]=t; i++;j--; } } while (i<=j); qs(i,high); qs(low,j);}long long dg(int l,int h,int dep){ int i,t,pre; long long d; char prechar; if (dep>ml-1) return s[h-l+1]; pre=l;d=1;prechar=c[l][dep];t=1; for (i=l+1;i<=h;i++) if (prechar!=c[i][dep]) { t++; d=(d*dg(pre,i-1,dep+1)%1000000007)%1000000007; pre=i; prechar=c[i][dep]; } if (pre!=h) d=(d*dg(pre,h,dep+1))%1000000007; d=(d*s[t])%1000000007; return d;}int main(){ ifstream fin("ranking.in",ios::in); ofstream fout("ranking.out",ios::out); fin>>n; for (i=1;i<=n;i++) { fin>>c[i]; l[i]=c[i].length(); ml=l[i]>ml? l[i]:ml; } for (i=1;i<=n;i++) if (l[i]<ml) for (j=l[i]+1;j<=ml;j++) c[i]=c[i]+'0'; qs(1,n); s[0]=1; for (i=1;i<=3000;i++) s[i]=(s[i-1]*i)%1000000007; fout<<dg(1,n,0);}
想一想还有八天。。
我的R!
阅读全文
0 0
- [7.8] 纪中C组
- [7.6]纪中C组
- [7.7] 纪中C组
- [7.9] 纪中C组
- [7.10] 纪中C组
- [7.11] 纪中C组
- 2015年蓝桥杯C组C/C++题目:格子中输出
- c/c++中extern "C"
- C++/C中指针详解
- [c]c中c串和字符串
- C中如何调用C++?C++中如何调用C?
- C中如何调用C++?C++中如何调用C
- c#textBox中换行
- C#中使用HashTable
- C中一些基本概念
- C++中extern “C”
- C中volatile关键字
- c中static用法
- 只谈 Unity中 yield return/ StartCoroutine 的使用
- 1007. Maximum Subsequence Sum (25)
- MySQL(四)
- jQuery获取建立唯一ID
- MFC 关于SendMessage 消息参数 传送字符串,结构体
- [7.8] 纪中C组
- 1045. Favorite Color Stripe 解析
- 观察者模式
- Laravel 使用insert插入数据,字段created_at为0000?
- 数组操作小技巧
- 浅谈Android中的MVVM模式
- 2017暑假集训 div1 最短路(1)
- 获取文本框 、单选、多选框的值
- shell中的通配符