您的位置:首页 > 其它

Codeforces Round #358 (Div. 2)

2016-06-20 17:06 337 查看
682A - Alyona and Numbers

#include <bits/stdc++.h>
#define met(a,b) memset(a,b,sizeof(a))
#define inf (1<<28)
#define mod 1000000007
#define MAXN 100000 + 10
#define MAXM 100000
using namespace std;
typedef long long LL;
typedef long double LD;
const double PI = acos(-1.0);
const double eps = 1e-6;

int n,m;

int main()
{
int i,j;
LL ans = 0;

cin>>n>>m;

for(i=1;i<=n;i++)
{
int x = ((i/5) + 1) * 5 - i;
if(m - x < 0)
continue;
ans += (m-x)/5 + 1;
}

cout<<ans<<endl;

return 0;
}
682B - Alyona and Mex
题目半天没看懂。。。

#include <bits/stdc++.h>
#define met(a,b) memset(a,b,sizeof(a))
#define inf (1<<28)
#define mod 1000000007
#define MAXN 100000 + 10
#define MAXM 100000
using namespace std;
typedef long long LL;
typedef long double LD;
const double PI = acos(-1.0);
const double eps = 1e-6;

int n,m;
int ary[MAXN];

int main()
{
int i,j;

cin>>n;

for(i=0;i<n;i++)
scanf("%d",&ary[i]);

sort(ary,ary+n);

int ans = 0;
for(i=0;i<n;i++)
{
if(ary[i] > ans)
ans++;
}

cout<<ans + 1<<endl;

return 0;
}
682C - Alyona and the Tree
建边,然后从1开始dfs

#include <bits/stdc++.h>
#define met(a,b) memset(a,b,sizeof(a))
#define inf (1<<28)
#define mod 1000000007
#define MAXN 100000 + 10
#define MAXM 100000
using namespace std;
typedef long long LL;
typedef long double LD;
const double PI = acos(-1.0);
const double eps = 1e-6;

int n;
int a[MAXN];

vector<pair<int ,int > > v[MAXN];

int dfs(int x,int fa,LL dis)
{
if(dis > a[x]) return 0;

LL ans = 1;
for(int i=0;i<v[x].size();i++)
{
if(v[x][i].first == fa) continue;
ans += dfs(v[x][i].first,x,max(dis + v[x][i].second,0LL));//max是防止溢出
}

return ans;
}

int main()
{
int i,j;

cin>>n;

for(i=1;i<=n;i++)
scanf("%d",&a[i]);

int p,c;

for(i=1;i<=n-1;i++)
{
scanf("%d%d",&p,&c);//建立边
v[i+1].push_back({p,c});//从i+1开始排除v[1]这种情况
v[p].push_back({i+1,c});
}

int ans = dfs(1,0,0);
cout<<n - ans<<endl;

return 0;
}

682D - Alyona and Strings
#include <bits/stdc++.h>
#define met(a,b) memset(a,b,sizeof(a))
#define inf (1<<28)
#define mod 1000000007
#define MAXN 1000 + 10
#define MAXM 100000
using namespace std;
typedef long long LL;
typedef long double LD;
const double PI = acos(-1.0);
const double eps = 1e-6;

int n,m,k;
char s1[MAXN],s2[MAXN];
int dp[MAXN][MAXN][15][2]={0};

int main()
{
int i,j,t;

cin>>n>>m>>k;

cin>>s1+1>>s2+1;

for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(s1[i] == s2[j])
for(t=1;t<=k;t++)
dp[i][j][t][0] = max(dp[i-1][j-1][t][0],dp[i-1][j-1][t-1][1]) + 1 ;

for(t = 1;t <= k;t++)
dp[i][j][t][1] = max(max(max(dp[i-1][j-1][t][1],dp[i][j][t][0]),dp[i-1][j][t][1]),dp[i][j-1][t][1]);
}
}

cout<<dp
[m][k][1]<<endl;
return 0;
}

E题一点思路都没
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CF358