A Codehorses T-shirts

相同长度之间互相转化即可

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;
const int N=105;
int n,a[N],b[N],ans;
string s[N],t[N];
map<string,int>mp;
int main()
{
mp["S"]=1,mp["M"]=2,mp["L"]=3;
mp["XS"]=4,mp["XL"]=5;
mp["XXS"]=6,mp["XXL"]=7;
mp["XXXS"]=8,mp["XXXL"]=9;
cin>>n;
for(int i=1;i<=n;i++)
cin>>s[i],a[mp[s[i]]]++;
for(int i=1;i<=n;i++)
cin>>t[i],b[mp[t[i]]]++;
for(int i=1;i<=9;i++)
ans+=abs(a[i]-b[i]);
printf("%d\n",ans/2);
return 0;
}

B Light It Up

把0和m点插进去,处理出s[0/1][i]为i&1为0或1区间长度的后缀和,然后枚举要插入的区间,贪心的把点插在p[i]+1(区间关灯)或p[i+1]-1(区间开灯),然后取后面反的前缀和更新ans即可

#include<iostream>
#include<cstdio>
using namespace std;
const int N=100005;
int n,m,a[N],s[2][N],ans;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int main()
{
n=read()+2,m=read();
for(int i=2;i<n;i++)
a[i]=read();
a[n]=m;
for(int i=n-1;i>=1;i--)
s[i&1][i]=a[i+1]-a[i]+s[i&1][i+1],s[~i&1][i]=s[~i&1][i+1];
// for(int i=1;i<=n;i++)
// cerr<<s[0][i]<<" "<<s[1][i]<<endl;
ans=s[1][1];
for(int i=1;i<n;i++)
if(a[i+1]-a[i]>1)
ans=max(ans,s[1][1]-s[1][i]+s[i&1][i+1]+a[i+1]-a[i]-1);//,cerr<<i<<" "<<s[1][1]-s[1][i]<<" "<<s[i&1][i+1]<<" "<<a[i+1]-a[i]-1<<endl;
printf("%d\n",ans);
return 0;
}

C Covered Points Count

hash一下左右端点,差分前缀和处理出hash后的点(代表这之后的一整段区间)的被覆盖次数,然后把区间长度加进相应的长度ans里即可

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
const int N=500005;
long long n,tot,has,a[N],l[N],r[N],g[N],rl[N],ans[N];
map<long long,long long>mp;
long long read()
{
long long r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int main()
{
n=read();
for(long long i=1;i<=n;i++)
l[i]=read(),r[i]=read(),g[++tot]=l[i],g[++tot]=r[i]+1;
sort(g+1,g+1+tot);
for(long long i=1;i<=tot;i++)
if(i==1||g[i]!=g[i-1])
mp[g[i]]=++has,rl[has]=g[i];
for(long long i=1;i<=n;i++)
a[mp[l[i]]]++,a[mp[r[i]+1]]--;
for(long long i=2;i<=has;i++)
a[i]+=a[i-1];
// for(long long i=1;i<=has;i++)
// cerr<<i<<" "<<rl[i]<<" "<<a[i]<<endl;
for(long long i=1;i<has;i++)
ans[a[i]]+=rl[i+1]-rl[i];
for(long long i=1;i<=n;i++)
printf("%lld ",ans[i]);
return 0;
}

D Yet Another Problem On a Subsequence

考的时候没做出来

设f[i]为选i为一个a1的方案数,转移是\( f[i]=\sum_{j=i+a[i]+1}{n+1}C_{i-j-1}{a[i]}*f[j] \) 最后的答案是\( ans=\sum_{i=1}^{n}f[i] \)

#include<iostream>
#include<cstdio>
using namespace std;
const int N=1005,mod=998244353;
int n,a[N],f[N],ans,c[N][N];
void jia(int &x,int y)
{
x+=y;
if(x>=mod)
x-=mod;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
c[0][0]=1;
for(int i=1;i<=n;i++)
{
c[i][0]=1;
for(int j=1;j<=i;j++)
c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
}
f[n+1]=1;
for(int i=n;i>=1;i--)
if(a[i]>0)
{
for(int j=i+a[i]+1;j<=n+1;j++)
jia(f[i],1ll*c[j-i-1][a[i]]*f[j]%mod);
jia(ans,f[i]);
}
printf("%d\n",ans);
return 0;
}

E We Need More Bosses

比较裸,先缩了边双然后求树的直径即可

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=300005;
int n,m,h[N],cnt,dfn[N],low[N],tot,s[N],top,bl[N],col,con,st,mx;
bool v[N];
pair<int,int>b[N<<1];
struct qwe
{
int ne,no,to;
}e[N<<1];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(int u,int v)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].no=u;
e[cnt].to=v;
h[u]=cnt;
}
void tarjan(int u,int fa)
{
dfn[u]=low[u]=++tot;
s[++top]=u;
for(int i=h[u];i;i=e[i].ne)
if(e[i].to!=fa)
{
if(!dfn[e[i].to])
{
tarjan(e[i].to,u);
low[u]=min(low[u],low[e[i].to]);
}
else
low[u]=min(low[u],dfn[e[i].to]);
}
if(low[u]==dfn[u])
{
col++;
while(s[top]!=u)
bl[s[top--]]=col;
bl[s[top--]]=col;
}
}
void dfs(int u,int fa,int len)
{
if(len>mx)
st=u,mx=len;
for(int i=h[u];i;i=e[i].ne)
if(e[i].to!=fa)
dfs(e[i].to,u,len+1);
}
int main()
{
n=read(),m=read();
for(int i=1;i<=m;i++)
{
int x=read(),y=read();
add(x,y),add(y,x);
}
tarjan(1,0);
for(int i=1;i<=cnt;i++)
if(bl[e[i].no]!=bl[e[i].to])
b[++con]=make_pair(bl[e[i].no],bl[e[i].to]);
memset(h,0,sizeof(h));
cnt=0;
for(int i=1;i<=con;i++)
add(b[i].first,b[i].second);
dfs(1,0,0);
mx=0;
dfs(st,0,0);
printf("%d\n",mx);
return 0;
}

Codeforces 1000 (A~E)的更多相关文章

  1. Codeforces 1000 组合数可行线段倒dp 边双联通缩点求树直径

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) using namespace std ...

  2. Educational Codeforces Round 46 (Div 2) (A~G)

    目录 Codeforces 1000 A.Codehorses T-shirts B.Light It Up C.Covered Points Count(差分) D.Yet Another Prob ...

  3. TopCoder SRM 560 Div 1 - Problem 1000 BoundedOptimization & Codeforces 839 E

    传送门:https://284914869.github.io/AEoj/560.html 题目简述: 定义"项"为两个不同变量相乘. 求一个由多个不同"项"相 ...

  4. 【Codeforces】Educational Codeforces Round 46(Contest 1000)

    题目 传送门:QWQ A:Codehorses T-shirts 题意: 给定一些字符串表示去年和今年的衣服型号大小( XL XXL M...... ),要求用最少的次数把去年的衣服大小改成今年需要的 ...

  5. CodeForces - 148D Bag of mice

    http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...

  6. Codeforces Round #344 (Div. 2) A. Interview

    //http://codeforces.com/contest/631/problem/Apackage codeforces344; import java.io.BufferedReader; i ...

  7. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  8. Codeforces Training S03E01泛做

    http://codeforces.com/gym/101078 和ysy.方老师一起打的virtual 打的不是很好...下面按过题顺序放一下过的题的题(dai)解(ma). A 给两个1~n的排列 ...

  9. 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror) in codeforces(codeforces730)

    A.Toda 2 思路:可以有二分来得到最后的数值,然后每次排序去掉最大的两个,或者3个(奇数时). /************************************************ ...

随机推荐

  1. Eclipse - 循环cin的输出怎样终止

    循环cin的输出怎样终止 本文地址: http://blog.csdn.net/caroline_wendy Eclipse中, 使用CDT编写C++代码时, 循环(while)cin输入程序, 须要 ...

  2. 释放SQL Server占用的内存 .Net 读取xml UrlReWriter 在web.config中简单的配置

    释放SQL Server占用的内存   由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),Sql Server才会释放一点点内存.所以很多 ...

  3. wx.request的并发问题

    wepyjs - 小程序组件化开发框架 https://tencent.github.io/wepy/document.html#/ 在同时并发10个request请求测试时: 不使用WePY: 使用 ...

  4. vscode部分文件夹无法打开

    vscode部分文件夹无法打开,无法正常显示 解决方案:关闭该IDE.找到C:\Users\XX\AppData\Roaming\Code,将Code文件夹删除.重新打开vsCode,即可恢复.但是以 ...

  5. iframe引入页面

    将外层css框架单独存放在一个css文件之中,将iframe的css单独写在一个css文件,避免iframe中的html,body等公共部分的样式冲突. 外层框架单独写在一个css,如: frame. ...

  6. (linux)SD卡初始化-mmc_sd_init_card函数

      为了学习SD/SDIO协议,看了一下linux中初始化SD卡的流程,结合代码更容易SD初始化是怎么做的. 下面图截自:"SD Specifications Part 1 Physical ...

  7. SDIO卡 了解

    SDIO接口是在SD接口基础上发展起来的,SDIO接口兼容SD接口.SDIO协议又在SD卡协议之上添加了CMD52(一般用来访问寄存器)和CMD53(字节和块传输)命令.SDIO和SD卡规范间的一个重 ...

  8. 【bzoj3282】Tree

    LCT模板题: 话说xor和的意思是所有数xor一下: #include<iostream> #include<cstdio> #include<cstring> ...

  9. box-sizing: border-box;的作用

    box-sizing 属性可以被用来调整这些表现: content-box  是默认值.如果你设置一个元素的宽为100px,那么这个元素的内容区会有100px宽,并且任何边框和内边距的宽度都会被增加到 ...

  10. Android Studio运行出现项目 错误:非法字符:“\ufeff”

    导入项目时,遇到编码问题. 主要原因是: eclipse可以自动把UTF-8+BOM文件转为普通的UTF-8文件,但Android Studio需要重新转换一下编码 解决方法: 将编码格式UTF-8+ ...