官方题解

1001. Add More Zero

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstring>
#include<vector>
#include<list>
#include<set>
#include<map>
using namespace std;
#define LL long long
#define pi (4*atan(1.0))
#define eps 1e-8
#define bug(x) cout<<"bug"<<x<<endl;
const int N=1e5+,M=1e6+,inf=1e9+;
const LL INF=1e18+,mod=1e9+; int main()
{
int n,cas=;
while(~scanf("%d",&n))
{
double x=1.0*log()/log()*n;
int ans=int(x);
printf("Case #%d: %d\n",cas++,ans);
}
return ;
}

1001

1002. Balala Power!

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstring>
#include<vector>
#include<list>
#include<set>
#include<map>
using namespace std;
#define LL long long
#define pi (4*atan(1.0))
#define eps 1e-8
#define bug(x) cout<<"bug"<<x<<endl;
const int N=1e5+,M=1e6+,inf=1e9+;
const LL INF=1e18+,mod=1e9+; char a[N];
int num[N][],flag[];
struct is
{
string x;
int pos;
bool operator <(const is &p)const
{
if(x.size()==p.x.size())
return x<p.x;
return x.size()<p.x.size();
}
}c[]; int main()
{
int n,cas=;
while(~scanf("%d",&n))
{
memset(num,,sizeof(num));
memset(flag,,sizeof(flag));
for(int i=;i<=n;i++)
{
scanf("%s",a);
int len=strlen(a);
if(len>)flag[a[]-'a']=;
for(int j=len-,k=;j>=;j--,k++)
{
num[k][a[j]-'a']++;
}
}
for(int j=;j<;j++)
for(int i=;i<=;i++)
{
if(num[i][j]>=)
{
num[i+][j]+=num[i][j]/;
num[i][j]%=;
}
}
for(int i=;i<;i++)
{
c[i].x="";
c[i].pos=i;
for(int j=;j>=;j--)
{
if(num[j][i]!=)
{
for(int k=j;k>=;k--)
c[i].x+=(char)(num[k][i]+'');
break;
}
}
}
sort(c,c+);
LL fuck=;
LL ans=;
int now=-;
for(int i=;i<=;i++)
if(flag[c[i].pos]==)
{
now=i;
break;
}
for(int i=;i<=;i++,fuck++)
{
if(i==now){
fuck--;
continue;
}
LL base=,out=;
for(int j=;j<=;j++)
{
out=(out+(1LL*num[j][c[i].pos])*base)%mod;
base=(1LL*base*)%mod;
}
ans=(ans+out*fuck)%mod;
}
printf("Case #%d: %lld\n",cas++,ans);
}
return ;
}

1003. Colorful Tree

树分治写法

#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define ls i<<1
#define rs ls | 1
#define mid ((ll+rr)>>1)
#define pii pair<int,int>
#define MP make_pair
typedef long long LL;
typedef unsigned long long ULL;
const long long INF = 1e18+1LL;
const double pi = acos(-1.0);
const int N = 2e5+, M = 1e3+,inf = 2e9,mod = ; int head[N],vis[N],f[N],siz[N],n,t = ,allnode,root;
struct edge{int to,next;}e[N * ];
void add(int u,int v) {e[t].next=head[u];e[t].to=v;head[u]=t++;}
void getroot(int u,int fa) {
f[u] = ;
siz[u] = ;
for(int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if(vis[to] || to == fa) continue;
getroot(to,u);
siz[u] += siz[to];
f[u] = max(f[u],siz[to]);
}
f[u] = max(f[u], allnode - siz[u]);
if(f[u] < f[root]) root = u;
}
int cnt[N],c[N],best[N],dep[N];
int vis2[N],fuck,vis3[N],cnt3[N];
LL ans = ;
inline void dfs3(int u,int f) {
vis2[c[u]] = ;
vis3[c[u]] = ;
cnt3[c[u]] = ;
for(int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if(vis[to] || to == f) continue;
dfs3(to,u);
}
}
inline LL dfs2(int u,int f,int now) {
LL ret = ;
if((!vis2[c[u]]) && fuck!=c[u])
ret += 1LL*siz[u] * (allnode - now - cnt[c[u]]),
cnt3[c[u]] += siz[u];
vis2[c[u]]++;
for(int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if(vis[to] || to == f) continue;
ret += dfs2(to,u,now);
}
vis2[c[u]]--;
return ret;
}
inline void make_fail(int u,int f) {
if(!vis3[c[u]])
cnt[c[u]] += cnt3[c[u]],
vis3[c[u]] = ;
for(int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if(vis[to] || to == f) continue;
make_fail(to,u);
}
}
inline LL cal(int u) {
LL ret = ;
LL ahv = ;
fuck = c[u];
dep[u] = ;
for(int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if(vis[to]) continue;
dfs3(to,u);
ret += dfs2(to,u,siz[to]);
make_fail(to,u);
ret += 1LL*(allnode - ahv - siz[to])*siz[to];
ahv += siz[to];
}
return ret;
}
void getdeep(int u,int f) {
siz[u] = ;
cnt[c[u]] = ;
dep[u] = dep[f] + ;
for(int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if(vis[to] || to == f) continue;
getdeep(to,u);
siz[u] += siz[to];
}
}
void work(int u) {
vis[u] = ;
getdeep(u,);
ans += cal(u);
for(int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if(vis[to]) continue;
allnode = siz[to];
root = ;
getroot(to,);
work(root);
}
}
void init() {
t = ;
for(int i = ; i <= n; ++i)
head[i] = ,vis[i] = ,cnt[i] = ;
}
int main() {
int cas = ;
while(scanf("%d",&n)!=EOF) {
init();
for(int i = ; i <= n; ++i) scanf("%d",&c[i]);
for(int i = ; i < n; ++i) {
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
ans = ;
f[] = inf;
allnode = n,root = ;
getroot(,);
work(root);
printf("Case #%d: %lld\n",cas++,ans);
}
return ;
}

1006. Function

#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define ls i<<1
#define rs ls | 1
#define mid ((ll+rr)>>1)
#define pii pair<int,int>
#define MP make_pair
typedef long long LL;
typedef unsigned long long ULL;
const long long INF = 1e18+1LL;
const double pi = acos(-1.0);
const int N = 5e5+, M = 1e3+,inf = 2e9,mod = ; int cnt,vis[N];
int n,m,a[N],b[N];
vector<int> G[N],E[N];
vector<LL > ret;
LL fi[N],ff[N];
void init() {
for(int i = ; i <= max(n,m); ++i) {
fi[i] = ;vis[i] = ;
ff[i] = ;
}
for(int i = ; i <= max(n,m); ++i) G[i].clear(),E[i].clear();
ret.clear();
}
void dfs(int u) {
cnt++;
vis[u] = ;
for(int i = ; i < G[u].size(); ++i) {
if(!vis[G[u][i]])dfs(G[u][i]);
}
}
void dfs2(int u) {
cnt++;
vis[u] = ;
for(int i = ; i < E[u].size(); ++i) {
if(!vis[E[u][i]]) dfs2(E[u][i]);
}
}
int main() {
int cas= ;
while(scanf("%d%d",&n,&m)!=EOF) {
init();
for(int i = ; i < n; ++i) {
scanf("%d",&a[i]);
G[i].push_back(a[i]);
}
for(int i = ; i < m; ++i) {
scanf("%d",&b[i]);
E[i].push_back(b[i]);
}
for(int i = ; i < n; ++i) {
if(!vis[i]) {
cnt = ;
dfs(i);
ret.push_back(cnt);
}
}
for(int i = ; i < m; ++i) vis[i] = ;
for(int i = ; i < m; ++i) {
if(!vis[i]) {
cnt = ;
dfs2(i);
fi[cnt]++;
}
}
for(int i = ; i <= m; ++i) {
for(int j = i; j <= n; j += i) {
ff[j] += fi[i]*i;
}
}
LL ans = ;
for(int i = ; i < ret.size(); ++i) {
if(ret[i] != )
ans = (ans * (fi[] + ff[ret[i]]))%mod;
else ans = (ans * (fi[]))%mod;
}
printf("Case #%d: %lld\n",cas++,ans);
}
return ;
}

1011. KazaQ's Socks

找规律

#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define ls i<<1
#define rs ls | 1
#define mid ((ll+rr)>>1)
#define pii pair<int,int>
#define MP make_pair
typedef long long LL;
typedef unsigned long long ULL;
const long long INF = 1e18+1LL;
const double pi = acos(-1.0);
const int N = 2e5+, M = 1e3+,inf = 2e9; LL k,n;
int main() {
int cas = ;
while(scanf("%lld%lld",&n,&k)!=EOF) {
printf("Case #%d: ",cas++);
if(k <= n) {
printf("%lld\n",k);
}
else {
k -= n;
LL tmp = k - k/(n-)*(n-);
if(tmp == ) tmp = n-;
if((k/(n-))%) {
if(tmp <= n-) printf("%lld\n",tmp);
else printf("%lld\n",n-);
}
else {
if(tmp <= n-) printf("%lld\n",tmp);
else printf("%lld\n",n);
} }
}
return ;
}

2017 Multi-University Training Contest - Team 1 (5/12)的更多相关文章

  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 ...

随机推荐

  1. [android开发篇] api demo 官网学习网址

    http://www.android-doc.com/resources/samples/wifidirectdemo/index.html

  2. 【java基础 11】java集合框架学习

    导读:本篇博客主要是从整体上了解java的集合框架,然后主要介绍几个自己在项目中用到的结构,比如说:hashtable.hashmap.hashset.arraylist等! 一.宏观预览 从宏观上看 ...

  3. Quartz与Terracotta的集成

    Quartz与Terracotta的集成 博客分类: Java&Socket 企业应用面临的问题 开源组件的应用 quartz任务集群数据库任务调度Terracotta  Quartz与Ter ...

  4. BZOJ4199 [Noi2015]品酒大会 【后缀数组 + 单调栈 + ST表】

    题目 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发"首席品 酒家"和"首席猎手"两个奖项,吸 ...

  5. 算法复习——trie树(poj2001)

    题目: 题目描述 给出 n 个单词(1<=n<=1000),求出每个单词的非公共前缀,如果没有,则输出自己. 输入格式 输入 N 个单词,每行一个,每个单词都是由 1-20 个小写字母构成 ...

  6. 算法复习——splay(bzoj3224)

    题目: Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个 ...

  7. cf670E Correct Bracket Sequence Editor

    Recently Polycarp started to develop a text editor that works only with correct bracket sequences (a ...

  8. jenkins使用流程

    jenkins使用流程 看下面那个连接的吧. http://www.cnblogs.com/zz0412/p/jenkins02.html 1.设置git库 2.点击add添加github用户名.密码 ...

  9. 转 Linux命令-文件管理命令

    http://jingyan.baidu.com/article/9113f81bc1c7a72b3214c7d3.html Linux命令-文件管理命令 浏览:4118 | 更新:2012-11-1 ...

  10. Mysql 使用存储过程添加新字段

    -- 1, 注意SQL 语句开始处不要空格 -- 2, 在使用 [--] 进行注释时,后面请加空格 USE `test`; -- lastUpdateTime drop procedure if ex ...