Codeforces Round #533 (Div. 2) 部分题解A~D
A. Salem and Sticks
题目描述
Salem gave you n n n sticks with integer positive lengths a1,a2,…,an a_1, a_2, \ldots, a_n a1,a2,…,an .
For every stick, you can change its length to any other positive integer length (that is, either shrink or stretch it). The cost of changing the stick's length from a a a to b b b is ∣a−b∣ |a - b| ∣a−b∣ , where ∣x∣ |x| ∣x∣ means the absolute value of x x x .
A stick length ai a_i ai is called almost good for some integer t t t if ∣ai−t∣≤1 |a_i - t| \le 1 ∣ai−t∣≤1 .
Salem asks you to change the lengths of some sticks (possibly all or none), such that all sticks' lengths are almost good for some positive integer t t t and the total cost of changing is minimum possible. The value of t t t is not fixed in advance and you can choose it as any positive integer.
As an answer, print the value of t t t and the minimum cost. If there are multiple optimal choices for t t t , print any of them.
输入输出格式
输入格式:
The first line contains a single integer n n n ( 1≤n≤1000 1 \le n \le 1000 1≤n≤1000 ) — the number of sticks.
The second line contains n n n integers ai a_i ai ( 1≤ai≤100 1 \le a_i \le 100 1≤ai≤100 ) — the lengths of the sticks.
输出格式:
Print the value of t t t and the minimum possible cost. If there are multiple optimal choices for t t t , print any of them.
输入输出样例
3 10 1 4
3 7
5 1 1 2 2 3
2 0 直接暴力遍历就行了;
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<bitset>
#include<ctime>
#include<deque>
#include<stack>
#include<functional>
#include<sstream>
//#include<cctype>
//#pragma GCC optimize(2)
using namespace std;
#define maxn 1000005
#define inf 0x7fffffff
//#define INF 1e18
#define rdint(x) scanf("%d",&x)
#define rdllt(x) scanf("%lld",&x)
#define rdult(x) scanf("%lu",&x)
#define rdlf(x) scanf("%lf",&x)
#define rdstr(x) scanf("%s",x)
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int U;
#define ms(x) memset((x),0,sizeof(x))
const long long int mod = 1e9 + 7;
#define Mod 1000000000
#define sq(x) (x)*(x)
#define eps 1e-4
typedef pair<int, int> pii;
#define pi acos(-1.0)
//const int N = 1005;
#define REP(i,n) for(int i=0;i<(n);i++)
typedef pair<int, int> pii;
inline ll rd() {ll x = 0;char c = getchar();bool f = false;while (!isdigit(c)) {if (c == '-') f = true;c = getchar();}while (isdigit(c)) {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f ? -x : x;
}ll gcd(ll a, ll b) {return b == 0 ? a : gcd(b, a%b);
}
int sqr(int x) { return x * x; }/*ll ans;
ll exgcd(ll a, ll b, ll &x, ll &y) {if (!b) {x = 1; y = 0; return a;}ans = exgcd(b, a%b, x, y);ll t = x; x = y; y = t - a / b * y;return ans;
}
*/int n;
int a[maxn];int main() {//ios::sync_with_stdio(0);cin >> n;for (int i = 1; i <= n; i++)rdint(a[i]);int t = 0;int minn = inf;int pos = 0;for (t = 1; t <= 101; t++) {int sum = 0;for (int i = 1; i <= n; i++) {sum += min(abs(a[i] - t), min(abs(a[i] - (t - 1)), abs(a[i] - (t + 1))));}if (sum < minn) {minn = sum; pos = t;}}cout << pos << ' ' << minn << endl;return 0;
}
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<bitset>
#include<ctime>
#include<deque>
#include<stack>
#include<functional>
#include<sstream>
//#include<cctype>
//#pragma GCC optimize(2)
using namespace std;
#define maxn 1000005
#define inf 0x7fffffff
//#define INF 1e18
#define rdint(x) scanf("%d",&x)
#define rdllt(x) scanf("%lld",&x)
#define rdult(x) scanf("%lu",&x)
#define rdlf(x) scanf("%lf",&x)
#define rdstr(x) scanf("%s",x)
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int U;
#define ms(x) memset((x),0,sizeof(x))
const long long int mod = 1e9 + 7;
#define Mod 1000000000
#define sq(x) (x)*(x)
#define eps 1e-4
typedef pair<int, int> pii;
#define pi acos(-1.0)
//const int N = 1005;
#define REP(i,n) for(int i=0;i<(n);i++)
typedef pair<int, int> pii;
inline ll rd() {ll x = 0;char c = getchar();bool f = false;while (!isdigit(c)) {if (c == '-') f = true;c = getchar();}while (isdigit(c)) {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f ? -x : x;
}ll gcd(ll a, ll b) {return b == 0 ? a : gcd(b, a%b);
}
int sqr(int x) { return x * x; }/*ll ans;
ll exgcd(ll a, ll b, ll &x, ll &y) {if (!b) {x = 1; y = 0; return a;}ans = exgcd(b, a%b, x, y);ll t = x; x = y; y = t - a / b * y;return ans;
}
*/int n, k;
string s;
map<char, int>mp;int main() {//ios::sync_with_stdio(0);cin >> n >> k;cin >> s;int ans = 0;int maxx = -inf;int cnt = 1;int len = 1;for (int i = 1; i < n; i++) {if (s[i] == s[i - 1]) {len++; cnt++;if (i == n - 1) {mp[s[i - 1]] += len / k;}}else {mp[s[i - 1]] += len / k;len = 1; cnt = 1;}}if (n == 1 && k == 1) {cout << 1 << endl; return 0;}for (char ch = 'a'; ch <= 'z'; ch++) {maxx = max(maxx, mp[ch]);}cout << max(0, maxx) << endl;return 0;
}
套路的DP?
设 dp[ i ][ j ]表示前i 个数余数为j的方案数;
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<bitset>
#include<ctime>
#include<deque>
#include<stack>
#include<functional>
#include<sstream>
//#include<cctype>
//#pragma GCC optimize(2)
using namespace std;
#define maxn 1000005
#define inf 0x7fffffff
//#define INF 1e18
#define rdint(x) scanf("%d",&x)
#define rdllt(x) scanf("%lld",&x)
#define rdult(x) scanf("%lu",&x)
#define rdlf(x) scanf("%lf",&x)
#define rdstr(x) scanf("%s",x)
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int U;
#define ms(x) memset((x),0,sizeof(x))
const long long int mod = 1e9 + 7;
#define Mod 1000000000
#define sq(x) (x)*(x)
#define eps 1e-4
typedef pair<int, int> pii;
#define pi acos(-1.0)
//const int N = 1005;
#define REP(i,n) for(int i=0;i<(n);i++)
typedef pair<int, int> pii;
inline ll rd() {ll x = 0;char c = getchar();bool f = false;while (!isdigit(c)) {if (c == '-') f = true;c = getchar();}while (isdigit(c)) {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f ? -x : x;
}ll gcd(ll a, ll b) {return b == 0 ? a : gcd(b, a%b);
}
int sqr(int x) { return x * x; }/*ll ans;
ll exgcd(ll a, ll b, ll &x, ll &y) {if (!b) {x = 1; y = 0; return a;}ans = exgcd(b, a%b, x, y);ll t = x; x = y; y = t - a / b * y;return ans;
}
*/int n;
int l, r;
ll dp[maxn][3];
int main() {//ios::sync_with_stdio(0);cin >> n >> l >> r;dp[1][0] = r / 3 - l / 3;dp[1][1] = dp[1][0];if (r % 3 > 0)dp[1][1]++;if (l % 3 > 1)dp[1][1]--;dp[1][2] = dp[1][0];if (r % 3 == 2)dp[1][2] ++;if (l % 3 == 0)dp[1][0]++;for (int i = 2; i <= n; i++) {dp[i][0] = ((dp[i - 1][0] * (dp[1][0]) % mod) + (dp[i - 1][1] * dp[1][2]) % mod + (dp[i - 1][2] * dp[1][1]) % mod) % mod;dp[i][1] = ((dp[i - 1][0] * (dp[1][1]) % mod) + (dp[i - 1][1] * dp[1][0]) % mod + (dp[i - 1][2] * dp[1][2]) % mod) % mod;dp[i][2] = ((dp[i - 1][0] * (dp[1][2]) % mod) + (dp[i - 1][1] * dp[1][1]) % mod + (dp[i - 1][2] * dp[1][0]) % mod) % mod;}cout << (ll)dp[n][0] % mod << endl;return 0;
}
多源bfs就行了;
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<bitset>
#include<ctime>
#include<deque>
#include<stack>
#include<functional>
#include<sstream>
//#include<cctype>
//#pragma GCC optimize(2)
using namespace std;
#define maxn 200005
#define inf 0x7fffffff
//#define INF 1e18
#define rdint(x) scanf("%d",&x)
#define rdllt(x) scanf("%lld",&x)
#define rdult(x) scanf("%lu",&x)
#define rdlf(x) scanf("%lf",&x)
#define rdstr(x) scanf("%s",x)
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int U;
#define ms(x) memset((x),0,sizeof(x))
const long long int mod = 1e9 + 7;
#define Mod 1000000000
#define sq(x) (x)*(x)
#define eps 1e-4
typedef pair<int, int> pii;
#define pi acos(-1.0)
//const int N = 1005;
#define REP(i,n) for(int i=0;i<(n);i++)
typedef pair<int, int> pii;
inline ll rd() {ll x = 0;char c = getchar();bool f = false;while (!isdigit(c)) {if (c == '-') f = true;c = getchar();}while (isdigit(c)) {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f ? -x : x;
}ll gcd(ll a, ll b) {return b == 0 ? a : gcd(b, a%b);
}
int sqr(int x) { return x * x; }/*ll ans;
ll exgcd(ll a, ll b, ll &x, ll &y) {if (!b) {x = 1; y = 0; return a;}ans = exgcd(b, a%b, x, y);ll t = x; x = y; y = t - a / b * y;return ans;
}
*/int vis[1002][1002];
bool used[1002][1002];
int dis[10][1002][1002];
int n, m;
int p;
int s[10];
vector<pii>vc[10];
int ans[10];
char chp[1003][1003];
int dx[] = { 0,0,1,-1 };
int dy[] = { 1,-1,0,0 };
bool OK(int x, int y) {return x <= n && x >= 1 && y >= 1 && y <= m;
}int main() {ios::sync_with_stdio(0);cin >> n >> m >> p;for (int i = 1; i <= p; i++)cin >> s[i];for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> chp[i][j];if (!(chp[i][j] == '.') && !(chp[i][j] == '#')) {used[i][j] = chp[i][j] - '0';ans[chp[i][j] - '0']++;vc[chp[i][j]-'0'].push_back(make_pair(i, j));}}}for (int i = 1; i <= p; i++)memset(dis[i], 0x3f, sizeof(dis[i]));while (1) {int fg = 0;for (int i = 1; i <= p; i++) {queue<pii>qu;for (auto it : vc[i]) {int tmpx = it.first;int tmpy = it.second;dis[i][tmpx][tmpy] = 0; qu.push(make_pair(tmpx, tmpy));}vc[i].clear();while (!qu.empty()) {int x = qu.front().first; int y = qu.front().second; qu.pop();if (dis[i][x][y] + 1 > s[i]) {continue;}for (int j = 0; j < 4; j++) {int nx = x + dx[j];int ny = y + dy[j];if (!used[nx][ny] && chp[nx][ny] == '.'&&dis[i][nx][ny] > dis[i][x][y] + 1&&OK(nx,ny)) {dis[i][nx][ny] = dis[i][x][y] + 1;vis[nx][ny] = 1; fg = 1; ans[i]++; used[nx][ny] = 1;qu.push(make_pair(nx, ny)); vc[i].push_back(make_pair(nx, ny));}}}}if (fg == 0)break;}for (int i = 1; i <= p; i++) {cout << ans[i] << ' ';}return 0;
}
转载于:https://www.cnblogs.com/zxyqzy/p/10297314.html
Codeforces Round #533 (Div. 2) 部分题解A~D相关推荐
- Codeforces Round #533 (Div. 2)题解
link orz olinr AK Codeforces Round #533 (Div. 2) 中文水平和英文水平都太渣..翻译不准确见谅 T1.给定n<=1000个整数,你需要钦定一个值t, ...
- Codeforces Round #686 (Div. 3) A-F题解
Codeforces Round #686 (Div. 3) A-F题解 A. Special Permutation 题意 给定 nnn ,输出一个长度为 nnn 的全排列,每个位置 iii 上的数 ...
- Codeforces Round #693 (Div. 3)部分题解
Codeforces Round #693 (Div. 3) 部分题解 D. Even-Odd Game 思路: 贪心:田忌赛马 (1)先将数组从大到小排序,取数时从大到小取,用一个ans变量记录取数 ...
- Codeforces Round #702 (Div. 3)A-G题解
Codeforces Round #702 (Div. 3)A-G题解 比赛链接:https://codeforces.ml/contest/1490 这场F读错题意白给一发,G二分的if(dp[mi ...
- codeforces Round #645 (Div. 2)D题解
Codeforces Round #645 (Div. 2)--D题解 作为一名菜鸡,理所当然得没有A出来,这道题数据放小就一水题了,可惜数据这块卡的死死的. 本题最重要的一点就是你要推出来一个结论: ...
- Codeforces Round #670 (Div. 2)A-D题解
Codeforces Round #670 (Div. 2)A-D题解 //写于rating值1987/2184 //补档 比赛链接:https://codeforces.ml/contest/140 ...
- Codeforces Round #674 (Div. 3)A-F题解
Codeforces Round #674 (Div. 3)A-F题解 比赛链接:https://codeforces.com/contest/1426 A题 水题不写题解 #include<b ...
- Codeforces Round #807 (Div. 2) A-C题解
Codeforces Round #807 (Div. 2) A.B.C题题解 A - Mark the Photographer 题意:马克要给2n个人照相,分两排,一排站n人,给出每个人的身高,要 ...
- Codeforces Round #723 (Div. 2) 个人题解
上1400辣! 传送门:https://codeforces.com/contest/1526 A. Mean Inequality 题意 给一个长度为偶数的数组,你需要重排这个数组,使得任意一个数不 ...
最新文章
- 30年前过气老论文,为何能催生革命全球的CNN框架?
- java 显式锁_Java 实现一个自己的显式锁Lock(有超时功能)
- paddle deepspeech v2 转 pytorch
- vim支持python/dyn,但has返回0
- dasblog的安装
- Objective-C优缺点
- web.xml详细配置
- html 隐藏hide,jQuery UI 实例
- DispatcherHelper
- #pragma warning(disable 4786)
- 用 Python3 + Selenium 实现模拟QQ空间登录及自动点赞功能
- 计算机挂个硬盘显示格式化怎么解决,硬盘提示格式化怎么办?硬盘数据怎么恢复?...
- 终极解决电脑缺失dll,应用程序无法正常启动0xc000007b
- phpAdmin导入sql文件太大
- 打造属于自己的量化投资系统9——支持向量机SVM算法在股票预测涨跌中应用
- linux系统安装(CentOS 7) 和软件安装(mysql,tomcat,jdk)
- 苹果开发者账号申请 App IDs(应用身份证)
- 为什么总学不好PS?300集PS从入门到高级自学教程,全面且系统
- cors数据类型_在外出RTK测量作业时,学会正确使用千寻cors账号,你才是最靓的仔...
- 手机连接电脑可以看到便签吗,电脑和手机同步的便签怎么找到
热门文章
- iOS开发笔记 基于wsdl2objc调用asp.net WebService
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信...
- Android自定义GridView显示一行,并且可以左右滑动
- linux中文输入法 ibus
- 【直通BAT】剑指Offer 经典试题整理(5)
- PIE SDK 坐标系创建、定义、对比
- 解决mysql Table ‘xxx’ is marked as crashed and should be repaired的问题。
- CXF 不依赖spring的实现
- mysql 触发器和存储过程组合使用,实现定时触发操作
- 使用表单传递参数,request处理参数出现未将对象引用设置到对象的实例