【NOIP2017】Day7
来源:互联网 发布:淘宝商家怎么交保证金 编辑:程序博客网 时间:2024/06/16 22:24
Solution
T1:
推了一个考试的数学公式,贼复杂,事实上正解也挺复杂的,什么二次函数求和?此处%ljn大佬的思路+精妙的代码,思路:6个点最多分成5的区域,注意左闭右开后枚举每个机器人在那个区间,在分类讨论1.3个在同一区间2.两个在同一区间3.在不同区间,分别计算,这个好算多了
T2:
数位DP,考试前讲过,A了,CF上的题
http://www.cnblogs.com/vongang/p/3141273.html
http://www.cnblogs.com/hxer/p/5169877.html
http://blog.csdn.net/keshuai19940722/article/details/19605745
http://blog.csdn.net/qq_33184171/article/details/52332586
贴几份吧,不想讲了
T3:
其实是水题,第一问可以直接算出各个字符数在计算,
40%:预处理字符串中各个字符的个数,计算O(N^2*62^2)
100%:预处理字符串与各个字符之间的贡献,计算O(N^2*62)
CODE
#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;#define ll long longint l[4],r[4],a[10],cnt;double C2(double x){ return x*(x-1)/2.0;}double C3(double x){ return x*(x-1)*(x-2)/6.0;}int main(){ freopen("jump.in","r",stdin); freopen("jump.out","w",stdout); int T; scanf("%d",&T); while (T--) { cnt=0; double ans=0; for (int i=1;i<=3;i++) { scanf("%d%d",&l[i],&r[i]); a[++cnt]=l[i]; a[++cnt]=r[i]+1; } sort(a+1,a+1+cnt); cnt=unique(a+1,a+1+cnt)-a-1; for (int i=1;i<=cnt-1;i++) for (int j=1;j<=i;j++) for (int k=1;k<=j;k++) if (l[1]<=a[i] && a[i+1]-1<=r[1] && l[2]<=a[j] && a[j+1]-1<=r[2] && l[3]<=a[k] && a[k+1]-1<=r[3]) { double n=a[i+1]-a[i],m=a[j+1]-a[j],p=a[k+1]-a[k]; if (i==j && j==k) ans+=C3(n)+C2(n)*2.0+(double)n; else if (i!=j && j!=k && i!=k) ans+=n*m*p; else if (i==j) ans+=C2(n)*p+n*p; else if (j==k) ans+=C2(m)*n+n*m; } for (int i=1;i<=3;i++) ans/=(double)(r[i]-l[i]+1); printf("%.9lf\n",ans); } return 0;}
#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;#define ll long longll pow10[20],Pow[20],dp[20][2][2520][50];int num[20],flcm[512],Map[2521],Map2[50],tot;int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int lcm(int a,int b){ if (a==0) return b; else if (b==0) return a; else return a/gcd(a,b)*b;}ll solve(ll x){ int len; ll ans=0; if (x==1e18) ans=1,x--; for (len=0;len<=18 && pow10[len]<=x;len++); for (int i=len;i>0;i--) num[i]=x%pow10[len-i+1]/pow10[len-i]; memset(dp,0,sizeof(dp)); dp[0][1][0][0]=1; for (int i=0;i<=len;i++) for (int j=0;j<2;j++) for (int k=0;k<2520;k++) for (int l=0;l<tot;l++) { ll p=dp[i][j][k][l]; int pp=Map2[l]; if (!p) continue; if (i==len) { if (k % pp==0) ans+=p; continue; } if (j==0) { for (int q=0;q<=9;q++) dp[i+1][0][(k+q*Pow[len-i-1])%2520][Map[lcm(pp,q)]]+=p; } else { for (int q=0;q<num[i+1];q++) dp[i+1][0][(k+q*Pow[len-i-1])%2520][Map[lcm(pp,q)]]+=p; dp[i+1][1][(k+num[i+1]*Pow[len-i-1])%2520][Map[lcm(pp,num[i+1])]]+=p; } } return ans;}void prepare(){ pow10[0]=Pow[0]=1; for (int i=1;i<=18;i++) pow10[i]=pow10[i-1]*10,Pow[i]=pow10[i]%2520; for (int i=1;i<(1<<9);i++) for (int j=1;j<=9;j++) if (i & (1<<j-1)) flcm[i]=lcm(flcm[i-(1<<j-1)],j); for (int i=1;i<(1<<9);i++) if (!Map[flcm[i]]) Map[flcm[i]]=tot++,Map2[tot-1]=flcm[i];}int main(){ freopen("number.in","r",stdin); freopen("number.out","w",stdout); prepare(); int T; scanf("%d",&T); while (T--) { ll a,b; scanf("%lld%lld",&a,&b); printf("%lld\n",solve(b)-solve(a-1)); } return 0;}
#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;#define ll long long#define MOD 1000000007char str1[10],str2[10],str[1000010];ll a[100][100],sum[1010][100],cnt[1010][100];int n,m;int id(char ch){ if (ch>='0' && ch<='9') return ch-'0'+1; else if (ch>='A' && ch<='Z') return ch-'A'+11; else if (ch>='a' && ch<='z') return ch-'a'+37;}void solve(){ ll ans=0,ans2=0; for (int i=1;i<=n;i++) for (int j=i;j<=n;j++) { ll tot=0; for (int k=1;k<=62;k++) tot=(tot+sum[i][k]*cnt[j][k])%MOD; ans=(ans+tot)%MOD; ans2=(ans2+tot*tot)%MOD; } cout<<ans<<endl<<ans2<<endl; }void ReadInfo(){ scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { int x; scanf("%s",str1); scanf("%s",str2); scanf("%d",&x); int y=id(str1[0]),z=id(str2[0]); a[y][z]=a[z][y]=x; } for (int i=1;i<=n;i++) { scanf("%s",str+1); int len=strlen(str+1); for (int j=1;j<=len;j++) cnt[i][id(str[j])]++; for (int j=1;j<=62;j++) for (int k=1;k<=62;k++) sum[i][j]=(sum[i][j]+cnt[i][k]*a[j][k])%MOD; }}int main(){ freopen("string.in","r",stdin); freopen("string.out","w",stdout); ReadInfo(); solve(); return 0;}
阅读全文
0 0
- 【NOIP2017】Day7
- Day7
- DAY7
- day7
- DAY7
- Day7
- day7
- day7
- day7
- Day7
- day7
- DAY7
- noip2017
- NOIP2017
- noip2017
- NOIP2017
- NOIP2017
- NOIP2017
- 【CUGBACM15级BC第16场 A】Revenge of Segment Tree
- awk详解(1)
- 最简单的python 爬虫
- myeclipse 导入 play项目
- 递归问题学习三之生成指定字符串的全排序
- 【NOIP2017】Day7
- Centos 7安装 pgplot
- 数据结构与算法之动态规划
- Java注解
- java转型
- spring中 shiro logout 配置方式
- OpenCV自学笔记25. 直方图均衡化
- 抽象类和接口
- 一个简单的函数封装(JavaScript+html)