啊人生第一次打多校被虐

紧随yql的脚步做题。

1001:

可以发现我们平时表示的数都是$x*log_{10}{10}$,所以类似于做一个换底公式就可以了。

-1是一个烟雾弹,因为小学生都知道2^n不可能是整十的数。

#include<bits/stdc++.h>
#define N 100005
using namespace std;
double x,y;
int m;
int main(){
int cnt=;
while(scanf("%d",&m)==){
x=(double)m;
x*=log10();
printf("Case #%d: %d\n",++cnt,(int)x);
}
}

1002:

这题先把字符串拆成26进制,然后贪心做就可以了。

#include<bits/stdc++.h>
const int N=1e6+;
const int M=1e5+;
const int yql=1e9+;
using namespace std;
int f[][N],p[N],vis[],n;
char s[N],ss[N];
inline bool cmp(int a,int b){
for(int i=M;i>=;i--)if(f[a][i]!=f[b][i])return f[a][i]>f[b][i];
return a<b;
}
int main(){
int cas=;
while(scanf("%d",&n)==){
memset(f,,sizeof(f));memset(vis,,sizeof(vis));
for(int i=;i<=n;i++){
scanf("%s",ss);int len=strlen(ss);
for(int j=;j<len;j++)f[ss[j]-'a'][len-j-]++;
if(len>)vis[ss[]-'a']=;
}
for(int i=;i<;i++){
for(int j=;j<M;j++){
f[i][j+]+=f[i][j]/;
f[i][j]%=;
}
p[i]=i;
}
sort(p,p+,cmp);int r=;
while(!vis[p[r]])r--;
int tmp=p[r];
for(int i=r;i<;i++)p[i]+=p[i+];
int ans=;p[]=tmp;int sum=;
for(int i=;i<;i++){
int val=-i,sum=;
for(int j=M-;j>=;j--){
sum=(1LL*sum*+f[p[i]][j])%yql;
f[p[i]][j]=;
}
ans+=1LL*val*sum%yql;
if(ans>=yql)ans-=yql;
}
printf("Case #%d: %d\n",++cas,ans);
}
}

1003:

有点像雅礼集训的某道题,洛谷以前某模拟赛原题。

如果是洛谷做法是点分治带log,肯定要被卡常

然后有神奇的On做法一遍dfs统计答案

可以看成是矩形面积并,这就类似与那道雅礼题了,就可以树状数组维护一维就可以了。

也是一个log,但是常数优越。

#include<bits/stdc++.h>
const int N=;
using namespace std;
typedef long long ll;
struct Edge{int u,v,next;}G[N<<];
int tot=,head[N],a[N],d[N],lpos[N],rpos[N],cnt=,q[N],fa[N],n;
int c[N*];
ll w[N],ans;
inline int lowbit(int x){return x&(-x);}
inline void addedge(int u,int v){
G[++tot].u=u;G[tot].v=v;G[tot].next=head[u];head[u]=tot;
G[++tot].u=v;G[tot].v=u;G[tot].next=head[v];head[v]=tot;
}
bool cmp(int x,int y){
if(a[x]==a[y])return d[x]>d[y];
return a[x]<a[y];
}
inline void add(int x,int val){
if(!x)return;
for(int i=lpos[x];i<=n;i+=lowbit(i))c[i]+=val;
}
inline int ask(int x){
int ans=;
for(int i=x;i;i-=lowbit(i))ans+=c[i];
return ans;
}
void dfs(int u,int f){
lpos[u]=++cnt;
for(int i=head[u];i;i=G[i].next){
int v=G[i].v;if(v==f)continue;
fa[v]=u;d[v]=d[u]+;
dfs(v,u);
}
rpos[u]=cnt;
}
inline int size(int x){return ask(rpos[x])-ask(lpos[x]-);}
inline void solve(int l,int r,int val){
ans+=w[n];
for(int i=l;i<=r;i++){
int u=q[i];
for(int i=head[u];i;i=G[i].next){
int v=G[i].v;if(v==fa[u]||a[v]==val)continue;
ans-=w[size(v)];
}
add(fa[u],-size(u));
}
if(a[]!=val)ans-=w[size()];
for(int i=r;i>=l;i--){
int u=q[i];
add(fa[u],size(u));
}
}
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
int cas=;
for(int i=;i<N;i++)w[i]=1LL*i*i;
while(scanf("%d",&n)==){
for(int i=;i<=n;i++)a[i]=read();
ans=;cnt=;tot=;memset(head,,sizeof(head));
for(int i=;i<n;i++){
int u=read(),v=read();
addedge(u,v);
}
for(int i=;i<=n;i++)q[i]=i,c[i]=;
dfs(,);
sort(q+,q+n+,cmp);
for(int i=;i<=n;i++)add(i,);
int j=;
for(int i=;i<=n;i=j){
for(j=i;j<=n&&a[q[i]]==a[q[j]];j++);solve(i,j-,a[q[i]]);
}
ans-=n;ans>>=;
printf("Case #%d: %I64d\n",++cas,ans);
}
}

1006:

找循环节,先确定一个出现次数以及因数

然后在另一个里面找

具体可以参考题解公式。

#include<bits/stdc++.h>
const int N=;
const int yql=1e9+;
using namespace std;
int n,m,cnt,cas,a[N],b[N],c[N],vis[N];
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
inline void dfsa(int u){
if(vis[u])return;vis[u]=;++cnt;
if(!vis[a[u]])dfsa(a[u]);
}
inline void dfsb(int u){
if(vis[u])return;vis[u]=;++cnt;
if(!vis[b[u]])dfsb(b[u]);
} int main(){
while(scanf("%d%d",&n,&m)==){
memset(vis,,sizeof(vis));memset(c,,sizeof(c));
for(int i=;i<n;i++)a[i]=read();for(int i=;i<m;i++)b[i]=read();
for(int i=;i<m;i++)if(!vis[i]){
cnt=;dfsb(i);c[cnt]++;
}
for(int i=;i<=m;i++)c[i]=1LL*i*c[i]%yql;
int lim=max(n,m);
for(int i=lim;i;i--)for(int j=i+i;j<=lim;j+=i)c[j]=(c[j]+c[i])%yql;
for(int i=;i<=n;i++)vis[i]=;int ans=;
for(int i=;i<n;i++)if(!vis[i]){
cnt=;dfsa(i);ans=1LL*ans*c[cnt]%yql;
}
printf("Case #%d: %d\n",++cas,ans);
}
}

1011:

找规律。

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
ll m;int cnt,n;
int main(){
while(scanf("%d%lld",&n,&m)==){
printf("Case #%d: ",++cnt);
if(m<=n){printf("%lld\n",m);continue;}
m-=n;m=(m-)%(n*-)+;
if(m<=n-){printf("%lld\n",m);continue;}
m-=n-;
if(m<=n-){printf("%lld\n",m);continue;}
else printf("%d\n",n);
}
}

以上是考场完成的……

剩下的能补几题是几题吧。

【2017 Multi-University Training Contest - Team 1】小结的更多相关文章

  1. 2017 Multi-University Training Contest - Team 9 1005&&HDU 6165 FFF at Valentine【强联通缩点+拓扑排序】

    FFF at Valentine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. 2017 Multi-University Training Contest - Team 9 1004&&HDU 6164 Dying Light【数学+模拟】

    Dying Light Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...

  3. 2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】

    CSGO Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  4. 2017 Multi-University Training Contest - Team 9 1002&&HDU 6162 Ch’s gift【树链部分+线段树】

    Ch’s gift Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  5. 2017 Multi-University Training Contest - Team 9 1001&&HDU 6161 Big binary tree【树形dp+hash】

    Big binary tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  6. 2017 Multi-University Training Contest - Team 1 1003&&HDU 6035 Colorful Tree【树形dp】

    Colorful Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  7. 2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】

    Function Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  8. 2017 Multi-University Training Contest - Team 1 1002&&HDU 6034 Balala Power!【字符串,贪心+排序】

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  9. 2017 Multi-University Training Contest - Team 1 1011&&HDU 6043 KazaQ's Socks【规律题,数学,水】

    KazaQ's Socks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  10. 2017 Multi-University Training Contest - Team 1 1001&&HDU 6033 Add More Zero【签到题,数学,水】

    Add More Zero Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

随机推荐

  1. bzoj1143-祭祀

    题目 给出一个有向无环图,要在上面安放祭祀点.两个祭祀点必须不可达,求最多能安放多少个祭祀点. 分析 由于一条无法再延伸链上只能安放一个祭祀点,而我们要求的是最多能安放祭祀点的个数,所以要求的就是最长 ...

  2. [SDOI2013]淘金 数位DP

    做了好久.... 大致思路: 求出前k大的方格之和即为答案, 先考虑一维的情况,设f[i]为数位上各个数相乘为i的数的总数,也就是对于数i,有f[i]个数它们各个位相乘为i, 再拓展到二维,根据乘法原 ...

  3. 存储引擎(Mysql)

    最常使用的2种存储引擎:1.Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam.每个MyISAM在磁盘上存储成三个文件.文件名都和表名相同, ...

  4. BZOJ5251:[九省联考2018]劈配——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5251 https://loj.ac/problem/2477  <-可以看数据 https: ...

  5. cf 442 div2 F. Ann and Books(莫队算法)

    cf 442 div2 F. Ann and Books(莫队算法) 题意: \(给出n和k,和a_i,sum_i表示前i个数的和,有q个查询[l,r]\) 每次查询区间\([l,r]内有多少对(i, ...

  6. bzoj2733: [HNOI2012]永无乡(splay+启发式合并/线段树合并)

    这题之前写过线段树合并,今天复习Splay的时候想起这题,打算写一次Splay+启发式合并. 好爽!!! 写了长长的代码(其实也不长),只凭着下午的一点记忆(没背板子...),调了好久好久,过了样例, ...

  7. 获取指定IP地址对应的物理位置

    # -*- coding: utf-8 -*- import requests def get_physical_location(ip): url = 'http://ip.taobao.com/s ...

  8. opencv学习--透视变化

    透视变换和仿射变换具有很大的相同特性,前面提到了放射变化,这里再次把它拿出和透视变换进行比较 #include"cv.h" #include"highgui.h" ...

  9. SQL Server 代理(已禁用代理 XP)

    sp_configure 'show advanced options', 1; GO RECONFIGURE WITH OVERRIDE; GO sp_configure 'Agent XPs', ...

  10. python基础--结构篇

    在C/C++/Java中,main是程序执行的起点,Python中,也有类似的运行机制,但方式却截然不同: Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入 ...