啊人生第一次打多校被虐

紧随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. BZOJ 1816 扑克牌(二分)

    由于答案具有单调性,考虑二分答案并验证. 如果能凑齐x堆,因为每个joke在一个牌堆里最多只能用一次,则至多只能用min(x,m)个joke. 对于每个牌,如果这个牌的总数小于x,用joke补齐剩下的 ...

  2. linux 服务器丢包故障排查

    项目开了个P2P服务器,但是运行一段时间就会出现丢包问题,具体表现为:1.udp丢包严重(一分钟收发分别1.5W) 2.ssh(用于运维指令)连接不上该服务器(超时) 3.服务器运行好像没什么异常,u ...

  3. Urllib--爬虫

    1.简单爬虫 from urllib import request def f(url): print('GET: %s' % url) resp = request.urlopen(url) #赋给 ...

  4. POJ2689:Prime Distance——题解

    http://poj.org/problem?id=2689 题目大意,给不超过int的l,r,其中r-l+1<=1000000,筛出其中的素数,并且求出相邻素数差值最大和最小的一对. ———— ...

  5. linux 使用vim文件加密/解密的方法

    一. 利用 vim/vi 加密:优点:加密后,如果不知道密码,就看不到明文,包括root用户也看不了:缺点:很明显让别人知道加密了,容易让别人把加密的文件破坏掉,包括内容破坏和删除: vi编辑器相信大 ...

  6. python代码格式规范

    目前的规范基于pep-0008 基本格式 缩进 使用4个空格进行缩进 行宽 每行代码尽量不超过80个字符 理由: 这在查看side-by-side的diff时很有帮助 方便在控制台下查看代码 太长可能 ...

  7. lnmp git ruby sass 安装

    1 cd .. 2 ls 3 cd mzx/ 4 ls 5 cd 桌面 6 cd lnmp1.4-full/ //到lnmp 的官网上下载后,根据官网的提示来安装lump 7 ls 8 install ...

  8. Elasticsearch6.0 IKAnalysis分词使用

    Elasticsearch 内置的分词器对中文不友好,会把中文分成单个字来进行全文检索,不能达到想要的结果,在全文检索及新词发展如此快的互联网时代,IK可以进行友好的分词及自定义分词. IK Anal ...

  9. Cropper

    jQuery.cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. 官网:https ...

  10. 痛苦之旅——安装Eric4

    因为想做桌面程序,所以在学PyQt4, 顺便装了下Eric4,这Eric4装起来可不简单,活活花了一个星期..... 网上有很多装Eric4的教程,详细我就不说了,大概步骤是: 1.安装SIP (需要 ...