【2017 Multi-University Training Contest - Team 1】小结
啊人生第一次打多校被虐
紧随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】小结的更多相关文章
- 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) ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- BZOJ4310 跳蚤(后缀数组+二分答案)
注意到答案一定是原串的子串,于是考虑造出SA,二分答案是第几小的子串.第k小子串很容易在SA上求出.之后计算使他成为最大子串至少要在几个位置切割,对每个字典序比答案大的后缀,找到所有合法切割位置(求l ...
- BZOJ1010:[HNOI2008]玩具装箱——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1010 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行 ...
- SPOJ1825/FTOUR2:Free tour II——包看得懂/看不懂题解
http://www.spoj.com/problems/FTOUR2/en/ 题目大意:给一棵黑白染色的树,求边权和最大且经过黑点不超过K的路径. ———————————————————— 前排膜拜 ...
- Vue推荐资料
推荐博文(我是看过,才敢说的偶): 基础教学: 菜鸟语法教程:https://cn.vuejs.org/v2/guide/syntax.html http://www.runoob.com/vue2 ...
- Shell编程语法
创建shell程序的步骤: 第一步:创建一个脚本文件.sh. 第二步:授予权限使它可以执行chmod u+x .sh 第三步:执行 ./example 或者 sh example 脚本调试: ...
- MySQL5.7 添加、删除用户与授权
mysql -uroot -proot 例子: 创建用户mysql> CREATE USER 'xiaoyaoji'@'%' IDENTIFIED BY 'xiaoyaoji';Query OK ...
- Vue.js中的常用的指令缩写
Vue.js为两个最为常用的指令提供了特别的缩写: v-bind缩写 <!--完整语法--> <a v-bind:href="url">测试</a&g ...
- HDU4022 Bombing STL
Bombing Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Su ...
- [codeforces/edu5]总结(F)
链接:http://codeforces.com/contest/616 A题: 统一成1e6长度的字符串,右对齐比较字典序. B题: 求所有行的最小值,里面最大的那个.暴力. C题: 先用dfs给每 ...
- postman ubuntu 14.04 安装
https://jingyan.baidu.com/album/e3c78d649735d63c4c85f5e5.html?picindex=1 实测有效---