Codeforces Round 927 (Div. 3)(A~F)
A
第一个遇到连续两个荆棘的地方就不能再赢金币了。
所以统计连续两个荆棘之前的所有金币
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
using namespace std;
void solve() {
int n;
cin>>n;
string str;
cin>>str;
int pos=n;
rep(i,0,n-2){
if(str[i]=='*'&&str[i+1]=='*'){
pos=i;
break;
}
}
int ans=0;
if(pos!=n){
rep(i,0,pos-1){
if(str[i]=='@'){
ans++;
}
}
}else{
rep(i,0,n-1){
if(str[i]=='@'){
ans++;
}
}
}
cout<<ans<<endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// freopen("1.in", "r", stdin);
int _;
cin>>_;
while(_--)
solve();
return 0;
}
B
最后需要满足\(a[i]>a[i-1]\)
\(a[i]\)只能增加自身的倍数
只需要计算\(a[i]\)最终会变为自己的多少倍会严格大于\(a[i-1]\),当\(a[i-1]\)是\(a[i]\)的倍数的时候,必须再\(+1\)才能保证严格大于。
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
using namespace std;
void solve() {
int n;
cin>>n;
vector<int>a(n+1);
rep(i,1,n){
cin>>a[i];
}
rep(i,1,n){
if(a[i]<=a[i-1]){
int cnt=a[i-1]/a[i]+1;
a[i]*=cnt;
}
}
cout<<a[n]<<endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// freopen("1.in", "r", stdin);
int _;
cin>>_;
while(_--)
solve();
return 0;
}
C
正着算会溢出
考虑倒着算,也就是先算最后一个留下的,然后边乘边模
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
using namespace std;
void solve() {
int n,m;
cin>>n>>m;
struct node{
int val,pos;
bool operator<(const node&t)const{
return pos>t.pos;
}
};
vector<node>a(n+1);
rep(i,1,n){
cin>>a[i].val;
}
string str;
cin>>str;
int cnt=1;
int l=1,r=n;
rep(i,0,str.size()-1){
if(str[i]=='L'){
a[l].pos=cnt++;
l++;
}else{
a[r].pos=cnt++;
r--;
}
}
sort(a.begin()+1,a.end());
// rep(i,1,n){
// cout<<a[i].val<<' '<<a[i].pos<<endl;
// }
vector<int>ans;
int mul=1;
rep(i,1,n){
int k=a[i].val*mul%m;
ans.pb(k);
mul=k;
}
fep(i,ans.size()-1,0){
cout<<ans[i]<<' ';
}
cout<<endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// freopen("1.in", "r", stdin);
int _;
cin>>_;
while(_--)
solve();
return 0;
}
D
模拟题.
同花色的两两配对,是奇数的话,再用一张王去配对
判断有没有解是通过奇数牌的张数和王的张数判断。
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
using namespace std;
void solve() {
int n;
cin>>n;
//0:C,1:D,2:H,3:S
set<int>s[4];
char c;
cin>>c;
map<char,int>mp;
mp['C']=0;
mp['D']=1;
mp['H']=2;
mp['S']=3;
map<int,char>pm;
pm[0]='C';
pm[1]='D';
pm[2]='H';
pm[3]='S';
rep(i,1,2*n){
string str;
cin>>str;
char k=str[1];
int num=str[0]-'0';
if(k=='C'){
s[0].insert(num);
}else if(k=='D'){
s[1].insert(num);
}else if(k=='H'){
s[2].insert(num);
}else{
s[3].insert(num);
}
}
int kk=0;
rep(i,0,3){
if(mp[c]==i){
continue;
}
kk+=s[i].size()%2;
}
if(kk>s[mp[c]].size()){
cout<<"IMPOSSIBLE"<<endl;
return;
}
rep(i,0,3){
if(mp[c]==i){
continue;
}
int ji=s[i].size()%2;
if(ji==1){
cout<<*s[i].begin()<<pm[i];
s[i].erase(s[i].begin());
cout<<' ';
cout<<*s[mp[c]].begin()<<pm[mp[c]];
s[mp[c]].erase(s[mp[c]].begin());
cout<<endl;
while(s[i].size()>=2){
cout<<*s[i].begin()<<pm[i];
s[i].erase(s[i].begin());
cout<<' ';
cout<<*s[i].begin()<<pm[i];
s[i].erase(s[i].begin());
cout<<endl;
}
}else{
while(s[i].size()>=2){
cout<<*s[i].begin()<<pm[i];
s[i].erase(s[i].begin());
cout<<' ';
cout<<*s[i].begin()<<pm[i];
s[i].erase(s[i].begin());
cout<<endl;
}
}
}
while(s[mp[c]].size()>=2){
cout<<*s[mp[c]].begin()<<pm[mp[c]]<<' ';
s[mp[c]].erase(s[mp[c]].begin());
cout<<*s[mp[c]].begin()<<pm[mp[c]]<<' ';
s[mp[c]].erase(s[mp[c]].begin());
cout<<endl;
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// freopen("1.in", "r", stdin);
int _;
cin>>_;
while(_--)
solve();
return 0;
}
E
数学题。
考虑每一位对答案的贡献
\(12345\)
个位会对答案贡献\(12345\)
十位会对答案贡献\(1234\)
百位会对答案贡献\(123\)
千位会对答案贡献\(12\)
万位会对答案贡献\(1\)
然后会发现规律,将上面列竖式相加
每一位的结果就是当前位的数和前面所有数的和,然后倒着处理一下进位。
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
using namespace std;
void solve() {
int n;
cin>>n;
string str;
cin>>str;
vector<int>s(n+1,0);
rep(i,1,n){
s[i]=s[i-1]+str[i-1]-'0';
}
fep(i,n,1){
s[i-1]+=s[i]/10;
s[i]%=10;
}
bool flag=false;
rep(i,0,n){
if(s[i]||flag){
cout<<s[i];
flag=true;
}
}
cout<<endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
// freopen("1.in", "r", stdin);
cout.tie(0);
int _;
cin>>_;
while(_--)
solve();
return 0;
}
F
\(dp[i][0|1]\):表示在第i个点不喂或喂猫,合法的能为猫的最大值
转移
\(nxt[i]\):在i处喂猫的话能喂猫的最有边的位置
\(cf[i]\):在i处喂猫,所能喂猫的所有数量
\(f[i][0]=max(f[i-1][0],f[i-1][1]);\)
\(f[i][1]=max(f[nxt[i]-1][1],f[nxt[i]-1][0])+cf[i];\)
\(cf[i]\)可以用差分处理一下
\(nxt[i]\)可以倒序枚举用\(nxt[i-1]\)去更新\(nxt[i]\)
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
using namespace std;
void solve() {
int n,m;
cin>>n>>m;
vector<int>nxt(n+2),cf(n+2);
rep(i,1,n){
nxt[i]=i;
}
rep(i,1,m){
int l,r;
cin>>l>>r;
cf[l]++;
cf[r+1]--;
nxt[r]=min(nxt[r],l);
}
//处理在每个点喂能为多少猫
rep(i,1,n){
cf[i]+=cf[i-1];
}
//处理转移的位置
fep(i,n-1,1){
nxt[i]=min(nxt[i],nxt[i+1]);
}
//dp
vector<vector<int>>f(n+1,vector<int>(2));
rep(i,1,n){
f[i][0]=max(f[i-1][0],f[i-1][1]);
f[i][1]=max(f[nxt[i]-1][1],f[nxt[i]-1][0])+cf[i];
}
cout<<max({f[n][0],f[n][1]})<<endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// freopen("1.in", "r", stdin);
int _;
cin>>_;
while(_--)
solve();
return 0;
}
Codeforces Round 927 (Div. 3)(A~F)的更多相关文章
- Codeforces Round #316 (Div. 2) (ABC题)
A - Elections 题意: 每一场城市选举的结果,第一关键字是票数(降序),第二关键字是序号(升序),第一位获得胜利. 最后的选举结果,第一关键字是获胜城市数(降序),第二关键字是序号(升序) ...
- Codeforces Round #240 (Div. 2)(A -- D)
点我看题目 A. Mashmokh and Lights time limit per test:1 secondmemory limit per test:256 megabytesinput:st ...
- Codeforces Round #395 (Div. 2)(未完)
2.2.2017 9:35~11:35 A - Taymyr is calling you 直接模拟 #include <iostream> #include <cstdio> ...
- Codeforces Round #324 (Div. 2) (哥德巴赫猜想)
题目:http://codeforces.com/problemset/problem/584/D 思路: 关于偶数的哥德巴赫猜想:任一大于2的偶数都可写成两个素数之和. 关于奇数的哥德巴赫猜想:任一 ...
- B. Nirvana Codeforces Round #549 (Div. 2) (递归dfs)
---恢复内容开始--- Kurt reaches nirvana when he finds the product of all the digits of some positive integ ...
- 【Codeforces】Codeforces Round #491 (Div. 2) (Contest 991)
题目 传送门:QWQ A:A - If at first you don't succeed... 分析: 按照题意模拟 代码: #include <bits/stdc++.h> usin ...
- 【Codeforces】Codeforces Round #492 (Div. 2) (Contest 996)
题目 传送门:QWQ A:A - Hit the Lottery 分析: 大水题 模拟 代码: #include <bits/stdc++.h> using namespace std; ...
- Codeforces Round #671 (Div. 2) (A~E)
Link~ 题面差评,整场都在读题 A 根据奇偶性判断一下即可. #include<bits/stdc++.h> #define ll long long #define N #defin ...
- Codeforces Round #524 (Div. 2)(前三题题解)
这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...
- Codeforces Round #624 (Div. 3)(题解)
Codeforces Round #624 (Div.3) 题目地址:https://codeforces.ml/contest/1311 B题:WeirdSort 题意:给出含有n个元素的数组a,和 ...
随机推荐
- 大数据面试题集锦-Hadoop面试题(二)-HDFS
你准备好面试了吗?这里有一些面试中可能会问到的问题以及相对应的答案.如果你需要更多的面试经验和面试题,关注一下"张飞的猪大数据分享"吧,公众号会不定时的分享相关的知识和资料. 目录 ...
- RC4加密技术探究:优缺点与实战应用
引言 在网络安全领域,加密技术一直是保障数据安全的重要手段.Rivest Cipher 4(简称RC4)作为一种对称加密算法,自20世纪80年代以来广泛应用于各种网络安全协议中.本文将详细分析RC4加 ...
- 【主流技术】聊一聊对 Mybatis Plus 的理解与应用
前言 mybatis plus是一个mybatis的增强工具,在其基础上只做增强不做改变.作为开发中常见的第三方组件,学习并应用在项目中可以节省开发时间,提高开发效率. 官方文档地址:MyBatis- ...
- Flask 框架:运用Ajax实现数据交互
使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载刷新整个页面,这使得程序能够更快地回应用户的操作,如下笔记将简单介绍使用AJAX如何实现前后端数据通信. 前后端发送字符串 前 ...
- libuv计时器
目录 1.uv_timer_t - 计时器句柄 2.API 2.1.uv_timer_init 2.2.uv_timer_start 2.3.uv_timer_stop 2.4.uv_timer_ag ...
- 设置两个Chrome浏览器 一个正常使用 一个无图片版
添加两个Chrome浏览器 双击打开Chrome浏览器,点击右上角头像,点击添加 选择"在不登录帐号的情况下继续",创建一个名字,选个配色,勾选下面的创建桌面快捷方式 此时会打开一 ...
- Docker从认识到实践再到底层原理(六-1)|Docker容器基本介绍+命令详解
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...
- .NET 大数据实时计算--学习笔记
摘要 纯 .Net 自研大数据实时计算平台,在中通快递服务数百亿包裹,处理数据万亿计!将分享大数据如何落地以及设计思路,技术重难点. 目录 背景介绍 计算平台架构 项目实战 背景介绍 计算平台架构 分 ...
- 基于C#的屏幕鼠标跟随圈圈应用 - 开源研究系列文章
去年8月的时候无聊,想起博客网页中的鼠标跟随圈圈效果,于是就想用C#在Windows操作系统级别的基础上去开发一个类似的应用,于是有了此文.上次在博问里也发帖咨询了一下( https://q.cnbl ...
- STM32 printf 方法重定向到串口UART
在嵌入式系统中调试代码是很麻烦的一件事, 如果能方便地输出调试信息(与调试者交互), 能使极大加快问题排查的过程. 串口在嵌入式领域是一个比较重要的通讯接口. 因为没有显示设备, 在单片机的程序里调用 ...