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.

输入输出样例

输入样例#1: 复制

3
10 1 4

输出样例#1: 复制

3 7

输入样例#2: 复制

5
1 1 2 2 3

输出样例#2: 复制

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相关推荐

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

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

  2. Codeforces Round #686 (Div. 3) A-F题解

    Codeforces Round #686 (Div. 3) A-F题解 A. Special Permutation 题意 给定 nnn ,输出一个长度为 nnn 的全排列,每个位置 iii 上的数 ...

  3. Codeforces Round #693 (Div. 3)部分题解

    Codeforces Round #693 (Div. 3) 部分题解 D. Even-Odd Game 思路: 贪心:田忌赛马 (1)先将数组从大到小排序,取数时从大到小取,用一个ans变量记录取数 ...

  4. Codeforces Round #702 (Div. 3)A-G题解

    Codeforces Round #702 (Div. 3)A-G题解 比赛链接:https://codeforces.ml/contest/1490 这场F读错题意白给一发,G二分的if(dp[mi ...

  5. codeforces Round #645 (Div. 2)D题解

    Codeforces Round #645 (Div. 2)--D题解 作为一名菜鸡,理所当然得没有A出来,这道题数据放小就一水题了,可惜数据这块卡的死死的. 本题最重要的一点就是你要推出来一个结论: ...

  6. Codeforces Round #670 (Div. 2)A-D题解

    Codeforces Round #670 (Div. 2)A-D题解 //写于rating值1987/2184 //补档 比赛链接:https://codeforces.ml/contest/140 ...

  7. Codeforces Round #674 (Div. 3)A-F题解

    Codeforces Round #674 (Div. 3)A-F题解 比赛链接:https://codeforces.com/contest/1426 A题 水题不写题解 #include<b ...

  8. Codeforces Round #807 (Div. 2) A-C题解

    Codeforces Round #807 (Div. 2) A.B.C题题解 A - Mark the Photographer 题意:马克要给2n个人照相,分两排,一排站n人,给出每个人的身高,要 ...

  9. Codeforces Round #723 (Div. 2) 个人题解

    上1400辣! 传送门:https://codeforces.com/contest/1526 A. Mean Inequality 题意 给一个长度为偶数的数组,你需要重排这个数组,使得任意一个数不 ...

最新文章

  1. 30年前过气老论文,为何能催生革命全球的CNN框架?
  2. java 显式锁_Java 实现一个自己的显式锁Lock(有超时功能)
  3. paddle deepspeech v2 转 pytorch
  4. vim支持python/dyn,但has返回0
  5. dasblog的安装
  6. Objective-C优缺点
  7. web.xml详细配置
  8. html 隐藏hide,jQuery UI 实例
  9. DispatcherHelper
  10. #pragma warning(disable 4786)
  11. 用 Python3 + Selenium 实现模拟QQ空间登录及自动点赞功能
  12. 计算机挂个硬盘显示格式化怎么解决,硬盘提示格式化怎么办?硬盘数据怎么恢复?...
  13. 终极解决电脑缺失dll,应用程序无法正常启动0xc000007b
  14. phpAdmin导入sql文件太大
  15. 打造属于自己的量化投资系统9——支持向量机SVM算法在股票预测涨跌中应用
  16. linux系统安装(CentOS 7) 和软件安装(mysql,tomcat,jdk)
  17. 苹果开发者账号申请 App IDs(应用身份证)
  18. 为什么总学不好PS?300集PS从入门到高级自学教程,全面且系统
  19. cors数据类型_在外出RTK测量作业时,学会正确使用千寻cors账号,你才是最靓的仔...
  20. 手机连接电脑可以看到便签吗,电脑和手机同步的便签怎么找到

热门文章

  1. iOS开发笔记 基于wsdl2objc调用asp.net WebService
  2. Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信...
  3. Android自定义GridView显示一行,并且可以左右滑动
  4. linux中文输入法 ibus
  5. 【直通BAT】剑指Offer 经典试题整理(5)
  6. PIE SDK 坐标系创建、定义、对比
  7. 解决mysql Table ‘xxx’ is marked as crashed and should be repaired的问题。
  8. CXF 不依赖spring的实现
  9. mysql 触发器和存储过程组合使用,实现定时触发操作
  10. 使用表单传递参数,request处理参数出现未将对象引用设置到对象的实例