Codeforces Round #443 (Div. 2) 【A、B、C、D】
2024-10-21 06:47:40
Codeforces Round #443 (Div. 2)
codeforces 879 A. Borya's Diagnosis【水题】
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
int n, t = , s, d;
scanf("%d", &n);
while(n--) {
scanf("%d%d", &s, &d);
while(s <= t) {s += d;}
t = s;
}
printf("%d\n", t);
return ;
}
78ms
codeforces 879 B. Table Tennis【模拟】
题意:一排n个人,给出每个人的a值,从第一个人开始,每次和后面人比赛,a值大的人赢,输的人走到最后位置去,求先连赢k场的人的a值。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
long long k;
int n, t = , a, ans = , cnt = , f = ;
scanf("%d%lld", &n, &k);
while(n--) {
scanf("%d", &a);
if(a < ans) cnt++;
else cnt = ;
ans = max(ans, a);
if(!f) {cnt = ;f = ;}
if(cnt >= k) break;
}
printf("%d\n", ans);
return ;
}
31ms
codeforces 878 A. Short Program【位运算】
题意:给出一系列与、或、异或这三种逻辑运算表达式,要对未知数x顺序做这些运算,要你合并运算,输出不超过5行的化简的运算式子。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
int main(){
int i, j, k, f, x;
int cnt = ;
int a = , b = , c = ;
char s;
scanf("%d", &n);
for(i = ; i <= n; ++i) {
getchar();
scanf("%c %d", &s, &x);
if(s == '|') {a |= x; b |= x; c &= (-x);}
else if(s == '&') {b &= x; c &= x;}
else if(s =='^') {c ^= x; }
}
if(a) cnt++;
if(b != ) cnt++;
if(c) cnt++;
printf("%d\n", cnt);
if(a) printf("| %d\n", a);
if(b != ) printf("& %d\n", b);
if(c) printf("^ %d\n", c);
return ;
}
156ms
codeforces 878 B. Teams Formation【模拟】
题意:长为n的数组a,重复m次形成一个序列,每次动态消去相邻k个相同的数,直到不能消去为止,求最后剩下几个数。
题解:先将长为n的一列数消除,然后考虑两段连接中间消除。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = ;
typedef long long ll;
int n, k, m, cnt;
int a[N], b[N], c[N];
ll ans = ;
int main() {
cnt = ;
int i, j, o, sum = ;
int l, r;
scanf("%d%d%d", &n, &k, &m);
for(i = ; i <= n; ++i) scanf("%d", &a[i]);
for(i = ; i <= n; ++i) {//第一段序列
if(a[i] != b[cnt]) { b[++cnt] = a[i]; c[cnt] = ; }
else { c[cnt]++; if(c[cnt] == k) cnt--; }
}
if(!cnt) {puts(""); return ;}
for(i = ; i <= cnt; ++i) sum += c[i];
for(o = , i = ; i < cnt+-i; ++i) {//相当于两段序列之间
if(b[i] == b[cnt+-i] && c[i] + c[cnt+-i] == k) o += k;
else break;
}
if(i<cnt+-i) {
if(b[i] == b[cnt+-i] && c[i] + c[cnt+-i] > k) o += k;
ans = 1ll * sum * m - 1ll * o * (m-);
}
else {//剩一种数字
ans = 1ll * c[i] * m % k;
if(ans) ans += sum - c[i];//两端的数
}
printf("%lld\n", ans);
return ;
}
31ms
最新文章
- [LeetCode] Guess Number Higher or Lower II 猜数字大小之二
- STM32之位绑定
- (转)mysql中InnoDB表为什么要建议用自增列做主键
- hadoop实战之分布式模式
- 随笔分类 - 无废话ExtJs系列教程
- Lumen 设置 timezone 时区
- winform异步进度条LongTime
- confusing uv
- ANDROID STUDIO, GRADLE AND NDK INTEGRATION
- 上海招聘FPGA讲师(专兼职均可)
- arrayList LinkedList HashMap HashTable的区别
- Python 装饰器装饰类中的方法
- IIS7常见错误及解决方法
- Gradle安装 Gradle效率提升 eclipse安装gradle插件 【我】
- SpringBoot切换Tomcat容器,SpringBoot使用Jetty容器
- Asp.net2.0之自定义控件ImageButton
- STM32串口的设置和库函数的介绍
- ROS Navigation中的map_server地图包功能和使用
- (转)Mysql主从复制搭建及详解
- 博弈论(Game Theory) - 04 - 纳什均衡