2017 Multi-University Training Contest - Team 1 (5/12)
官方题解
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)的更多相关文章
- 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 ...
随机推荐
- php 注册与登录
<body background="timg.jpg"><div class="dak"> <div class="zu ...
- 九度oj 题目1340:小A的计算器
题目描述: 以往的操作系统内部的数据表示都是二进制方式,小A新写了一个操作系统,系统内部的数据表示为26进制,其中0-25分别由a-z表示. 现在小A要在这个操作系统上实现一个计算器,这个计算器要能实 ...
- Terracotta服务器的不同配置方式
Terracotta服务器的不同配置方式 博客分类: 企业应用面临的问题 Java&Socket 开源组件的应用 Terracotta双机多机镜像服务器阵列分片模式企业应用 Terracott ...
- SPOJ QTREE Query on a tree V ——动态点分治
[题目分析] QTREE4的弱化版本 建立出分治树,每个节点的堆表示到改点的最近白点距离. 然后分治树上一直向上,取min即可. 正确性显然,不用担心出现在同一子树的情况(不会是最优解),请自行脑补. ...
- bzoj3743 [Coci2015]Kamp 常州模拟赛d6t2
3743: [Coci2015]Kamp Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 484 Solved: 229[Submit][Status ...
- bzoj3874&2832 [Ahoi2014]宅男计划 模拟退火,三分
[Ahoi2014&Jsoi2014]宅男计划 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 962 Solved: 371[Submit][ ...
- Heritage of skywalkert
Heritage of skywalkert skywalkert, the new legend of Beihang University ACM-ICPC Team, retired this ...
- 洛谷 [P2964] 硬币的游戏
博弈论+dp 依旧是博弈论的壳子,但问的是最大值,所以要dp 设 dp[i][j] 表示该取 i 号硬币,上一次取了 j 个的先手能取的最大值, 因为每次从小到大枚举复杂度太高,所以我们要从 dp[i ...
- linux的at定时任务的使用
linux的at定时任务的使用 使用at只能执行一次性任务:使用at命令需要开启atd进程. 以下情况需要安装at命令: 情况1.查看是否开启atd进程:ps -ef | grep atd.[test ...
- Redis对象的设计与实现
一.Redis对象结构Redis中的每个对象都由一个redisObject结构表示: typedef struct redisObject { unsigned type;//类型 unsigned ...