C:

题意:

有n个整数ai,数列a有两个神奇的性质。1.所有的整数都在[l,r]范围内。2.这n个数的和能被3整除。现在给出l和r,和个数n,问你有多少种方法构造出数列a,方案数mod1e9+7.

题解:

一个数被3除只有三种可能。1.整除,2.余1,2.余2.

然后我们再想这个问题,[l,r]区间内,能被3整除的数有多少?a0=r/3-l/3。余1/2的数有多少?a1/2=((r-l+1)-a0)/2.(这里具体余1和余2不重要,想想为什么)

我们设f[i][j]为前i个数,和除3余j的方案数。怎么转移呢。

f[i][0]=f[i-1][1]*a2+f[i-1][2]*a1+f[i-1][0]*a0.

f[i][1]=f[i-1][0]*a1+f[i-1][1]*a0+f[i-1][2]*a2.

f[i][2]=f[i-1][0]*a2+f[i-1][1]*a1+f[i-1][2]*a0.

 #include<stdio.h>
#include<iostream>
using namespace std; long long dp[][];
const long long mod=;
int main(){
int n,l,r;
cin>>n>>l>>r;
long long a0,a1,a2;
long long sum=r-l+;
a0=r/-(l-)/;
sum-=a0;
a1=sum/;
a2=sum-a1 ;
dp[][]=a0;
dp[][]=a1;
dp[][]=a2;
for(int i=;i<=n;i++)
{
dp[i][]=(dp[i-][]*a2+dp[i-][]*a0+dp[i-][]*a1)%mod;
dp[i][]=(dp[i-][]*a0+dp[i-][]*a1+dp[i-][]*a2)%mod;
dp[i][]=(dp[i-][]*a1+dp[i-][]*a2+dp[i-][]*a0)%mod;
}
printf("%I64d\n",dp[n][]); }

D.题意

kilani正在和朋友们玩一个游戏,这个游戏在一个n*m的网格上,每个格子要么是空白,要么是已经被占领,每个玩家有一个或者多个城堡。每个玩家轮流进行游戏。对于玩家i,他可以从一个已有的城堡向一个空白的格子扩建一个城堡,如果这个空白的格子和它的曼哈顿距离不超过s[i]。

求游戏结束后每个玩家占领的格子数量。

题解:

一个多源bfs。具体可以看代码

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue> #define pir pair<int,int>
#define mkp make_pair
using namespace std;
const int maxn=+;
const int dx[]={,,,-};
const int dy[]={,-,,}; int n,m,p;
int a[],ans[];
char G[maxn][maxn];
int vis[maxn][maxn];
struct Node{
int x,y,p;
};
int main(){
scanf("%d%d%d",&n,&m,&p);
for(int i=;i<=p;i++){
scanf("%d",&a[i]);
}
queue<pir>q;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf(" %c",&G[i][j]);
}
}
for(int k=;k<=p;k++){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
// scanf(" %c",&G[i][j]);
if(G[i][j]!='.'&&G[i][j]!='#'&&G[i][j]-''==k){
vis[i][j]=k;
q.push(mkp(i,j));
}
}
}
} while(!q.empty()){
pir u=q.front();q.pop();
int x=u.first,y=u.second;
int num=vis[x][y];
queue<Node>q2;
q2.push({x,y,a[num]});
while(!q.empty()){
pir u1=q.front();
if(vis[u1.first][u1.second]==num){
q.pop();
q2.push({u1.first,u1.second,a[num]});
}else{
break;
}
} while(!q2.empty()){
Node u1=q2.front();q2.pop();
if(u1.p<=)continue;
for(int k=;k<;k++){
int nx=u1.x+dx[k];
int ny=u1.y+dy[k];
if(nx>=&&nx<=n&&ny>=&&ny<=m&&G[nx][ny]=='.'&&vis[nx][ny]==){
vis[nx][ny]=num;
q2.push({nx,ny,u1.p-});
q.push(mkp(nx,ny));
}
}
} } for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(vis[i][j]){
ans[vis[i][j]]++;
//printf("%d ",vis[i][j]);
}
}
//printf("\n");
} for(int i=;i<=p;i++){
printf("%d ",ans[i]);
}
return ;
}

E. Helping Hiasat

题意:

Hiasat有一个社交账号,当他的朋友们每次来看他社交首页的时候,如果他首页的名字是这个朋友的名字,他朋友就会很开心。给出一个序列代表可以修改名字的时间和朋友们来访问的顺序,问如何修改才能让开心的朋友们最多。

题解:

显然在两次修改之间的所有访问,只能满足一次。那么其实很显然,将这些点之间连边,然后求图的最大独立集。然后最大独立集怎么求?求补图中的最大团。最大团怎么求?套板子啊!!

 include <bits/stdc++.h>
using namespace std;
const int maxn = ;
bool mp[maxn][maxn];
int num[maxn], group[maxn], now[maxn];
int n, m, ans;
bool dfs(int u, int cnt)
{
int i, j;
for(i = u+; i <= n; ++i)
{
if(num[i]+cnt <= ans) return false; //��֦3
if(mp[u][i])
{
for(j = ; j < cnt; ++j)
if(!mp[i][now[j]]) break;
if(j == cnt) //��
{
now[cnt] = i;
if(dfs(i, cnt+)) return true;
}
}
}
if(cnt > ans)
{
for(i = ; i < cnt; ++i)
group[i] = now[i];
ans = cnt;
return true;
}
return false;
} int MaximumClique()
{
ans = -;
for(int i = n; i >= ; --i)
{
now[] = i;
dfs(i, );
num[i] = ans;
}
return ans;
}
map<string,int>Name;
int name_num;
int N,M;
int G[maxn][maxn]; int main()
{
scanf("%d%d",&N,&M);
vector<int>per;
set<int>S;
for(int i=;i<=N;i++){
int type;
scanf("%d",&type);
if(type==){
per.clear();
S.clear();
}else{
string name;
cin>>name;
if(!Name.count(name)){
Name[name]=++name_num;
}
if(!S.count(Name[name])){
S.insert(Name[name]);
for(int i=;i<per.size();i++){
int u=per[i];
G[u][Name[name]]=;
G[Name[name]][u]=;
}
per.push_back(Name[name]);
}
}
}
n=name_num;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
mp[i][j]=!G[i][j];
}
}
printf("%d\n",MaximumClique());
// while(cin >> n && n)
// {
// for(int i = 1; i <= n; ++i)
// for(int j = 1; j <= n; ++j)
// {
// int x; cin >> x;
// mp[i][j] = x;
// }
// cout << MaximumClique() << endl;
// }
return ;
}

Codeforces Round #533 (Div. 2)的更多相关文章

  1. Codeforces Round #533 (Div. 2)题解

    link orz olinr AK Codeforces Round #533 (Div. 2) 中文水平和英文水平都太渣..翻译不准确见谅 T1.给定n<=1000个整数,你需要钦定一个值t, ...

  2. Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS

    题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全 ...

  3. Codeforces Round #533 (Div. 2) C. Ayoub and Lost Array 【dp】

    传送门:http://codeforces.com/contest/1105/problem/C C. Ayoub and Lost Array time limit per test 1 secon ...

  4. Codeforces Round #533 (Div. 2) B. Zuhair and Strings 【模拟】

    传送门:http://codeforces.com/contest/1105/problem/B B. Zuhair and Strings time limit per test 1 second ...

  5. Codeforces Round #533(Div. 2) C.Ayoub and Lost Array

    链接:https://codeforces.com/contest/1105/problem/C 题意: 给n,l,r. 一个n长的数组每个位置可以填区间l-r的值. 有多少种填法,使得数组每个位置相 ...

  6. Codeforces Round #533(Div. 2) D.Kilani and the Game

    链接:https://codeforces.com/contest/1105/problem/D 题意: 给n*m的地图,最多9个人,同时有每个人的扩张次数(我开始以为是直线扩张最大长度..实际是能连 ...

  7. Codeforces Round #533(Div. 2) B.Zuhair and Strings

    链接:https://codeforces.com/contest/1105/problem/B 题意: 给一个字符串和k,连续k个相同的字符,可使等级x加1, 例:8 2 aaacaabb 则有aa ...

  8. Codeforces Round #533(Div. 2) A.Salem and Sticks

    链接:https://codeforces.com/contest/1105/problem/A 题意: 给n个数,找到一个数t使i(1-n)∑|ai-t| 最小. ai-t 差距1 以内都满足 思路 ...

  9. Codeforces Round #533 (Div. 2) E. Helping Hiasat(最大独立集)

    题目链接:https://codeforces.com/contest/1105/problem/E 题意:有 n 个事件,op = 1 表示我可以修改昵称,op = 2 表示一个名为 s_i 的朋友 ...

  10. Codeforces Round #533 (Div. 2) D. Kilani and the Game(BFS)

    题目链接:https://codeforces.com/contest/1105/problem/D 题意:p 个人在 n * m 的地图上扩展自己的城堡范围,每次最多走 a_i 步(曼哈顿距离),按 ...

随机推荐

  1. 1033 To Fill or Not to Fill (25 分)

    1033 To Fill or Not to Fill (25 分) With highways available, driving a car from Hangzhou to any other ...

  2. [UE4]把枪抽象为一个类

  3. Linux命令详解-文件系统管理

    1. 外部设备简介 (1.)硬盘的分类: IDE硬盘 ./dev/hda   hdb,hdc…  分区后:/dev/hda1  /dev/hda2 scsi硬盘: /dev/sda   sdb,sdc ...

  4. 自己写的jQuery放大镜插件效果(二)(采用只有一张图片的思路)

    废话不多说,先看效果图,和上一章节用的是同一个小图片: 这个方法实现的放大有个弊端就是放大倍数设置的过大的话,会带来图片上的模糊.但是图片加载的话要比使用2张图片加载的快很多 插件代码: ; (fun ...

  5. X-Requested-With

    最近工作中发现,使用angular $http跨域的时候,虽然后台已经配置了跨域允许,但是还是报错. 查资料发现,angular $http 的request的请求头中,默认有: Access-Con ...

  6. Swift里的CAP理论和NWR策略应用

    http://blog.sina.com.cn/s/blog_57f61b490101a8ca.html 最近有人讨论到swift副本数是否能够调整,3副本成本过高,如果改成2副本怎么样?多聊了几句以 ...

  7. HTML5之viewport使用

    好久都没更新博客了,最近一年转型移动端,当然网页端也得兼顾,慢慢写一写基本性的文章,多积累. 本期介绍下viewport的一些使用: 先看看viewport在页面中的样子: <meta name ...

  8. IDEA在编辑时提示could not autowire

    IDEA在编辑时提示could not autowire 原创 2016年05月14日 10:53:38 28338 在开发中我再applicationContext-dao.xml中加入了mappe ...

  9. InterlliJ IDEA 2017.3.x / 2017.3.4 License Server激活

    InterlliJ IDEA 2017.3.x / 2017.3.4 License Server激活 1.Lincense Server激活 // 激活IDEA的License Server 地址 ...

  10. 13.mysql基本查询

    1. 给表起个别名:但是,前面的也是需要进行修改的,否则会报错的: select * from s.name from students as s; 2. 为字段起别名 select s,name a ...