湖南集训Day1
2015-12-26 18:34
337 查看
萌萌的陈老师把我吓到了,“好的”“就酱”捋头发,简直萌出血了。
然而依旧被题目虐哭了,只能水水第一题了,还只水到70分,亏我做了三个小时。。。。。。
第二题直接上最大流10分TAT,第三题没时间做了,目测逆序对能拿50分,可惜了。
然而依旧被题目虐哭了,只能水水第一题了,还只水到70分,亏我做了三个小时。。。。。。
第二题直接上最大流10分TAT,第三题没时间做了,目测逆序对能拿50分,可惜了。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<map> using namespace std; typedef long long ll; map<ll,int>hs[10]; ll gcd(ll a,ll b){ return (!b)?a:gcd(b,a%b); } ll lcm(ll a,ll b){ return a/gcd(a,b)*b; } int num[10][20],cnt[10]; bool choose[20]; ll tmp; void work(int x,int mark){ tmp=1; for(int i=1;i<=num[x][0];i++) if(choose[i])tmp=lcm(tmp,num[x][i]); hs[x][tmp]+=mark; } void dfs(int now,int x,int k,int flag){ if(now>num[x][0]){ if(!k)work(x,flag); return ; } choose[now]=true; dfs(now+1,x,k-1,flag); choose[now]=false; dfs(now+1,x,k,flag); } ll calc(ll x,int K){ if(x==1||x==0)return 0; ll ans=0; map<ll,int>::iterator it; for(it=hs[K].begin();it!=hs[K].end();it++){ ans+=x/(*it).first*(*it).second; } return ans; } void pre(){ for(int i=2;i<=7;i++) for(int j=1;j<=num[i][0];j++) if(j&1)dfs(1,i,j,1); else dfs(1,i,j,-1); } int main(){ num[2][0]=1;num[2][1]=2; num[3][0]=2;num[3][1]=3;num[3][2]=4; num[4][0]=3;num[4][1]=4;num[4][2]=6;num[4][3]=10; num[5][0]=6;num[5][1]=5;num[5][2]=6;num[5][3]=8;num[5][4]=9;num[5][5]=14;num[5][6]=21; num[6][0]=6;num[6][1]=6;num[6][2]=8;num[6][3]=10;num[6][4]=14;num[6][5]=44;num[6][6]=52; num[7][0]=15;num[7][1]=7;num[7][2]=8;num[7][3]=9;num[7][4]=10;num[7][5]=12;num[7][6]=15;num[7][7]=22;num[7][8]=33;num[7][9]=39;num[7][10]=52;num[7][11]=55;num[7][12]=68;num[7][13]=102;num[7][14]=114;num[7][15]=138; int T;scanf("%d",&T); pre(); printf("%d\n",hs[7].size()); while(T--){ int K; ll A,B; scanf("%lld%lld%d",&A,&B,&K); printf("%lld\n",calc(B,K)-calc(A-1,K)); } return 0; }
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=2500000+5; typedef long long ll; int cnt ; ll num ,sum ; int main(){ int m,n,n0,nd,m0,md; scanf("%d%d%d%d%d%d",&m,&n,&m0,&md,&n0,&nd); for(int i=1;i<=m;i++){ cnt[m0]++; m0=(m0*58+md)%(n+1); } for(int i=1;i<=n;i++){ num[n0]++;sum[n0]+=n0; n0=(n0*58+nd)%(m+1); } for(int i=1;i<=m;i++)num[i]+=num[i-1],sum[i]+=sum[i-1]; ll a=0,sa=0,ans=sum[m]; for(int i=0;i<=n;i++) for(int j=1;j<=cnt[i];j++){ a++;sa+=i; ll b=num[m-a],sb=sum[m-a]; ll ret=sa+sb+(m-a)*(n-b); ans=min(ans,ret); } printf("%lld",ans); return 0; }
相关文章推荐
- std::thread 在DLLMain 中会发生死锁 std::thread cause deadlock in DLLMain
- 设计模式六大原则(2):里氏替换原则
- 01背包解析
- 阮郎归·藤缠树
- 简单横屏
- hdu 1262 寻找素数对 数论 打表。
- HDU The Magic Tower(2015.12.26训练 杭电校赛)
- (八)外部中断的设计与应用 02 中断优先级嵌套设计
- #define XXX(...) 这种形式多参宏预处理之后的样子
- Sublime Text3安装js插件
- 线性表-第2章-《数据结构习题集》答案解析-严蔚敏吴伟民版
- EL表达式与JSTL(C)标签
- TOP命令监视系统任务及掩码umask的作用
- 使用Python递归在根目录下面写入文件
- 面试问题集合
- 每次调起微信JSAPI报错或支付失败
- 设计模式六大原则(1):单一职责原则
- QT安装经验
- java中如何输入数字串,过滤掉逗号,把他们放入数组
- git 基本使用,初始化本地仓库,创建文件,add文件,commit文件,git版本穿梭