Codeforces Round #540 (Div. 3)
A链接
讨论一下2a2a2a跟bbb的大小关系即可。
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <math.h>
#include <bitset>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#define MAXN 1010100
#define LL long long
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ll __int64
#define INF 0x7fffffff
#define cs(s) freopen(s,"r",stdin)
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
#define eps 1e-10
using namespace std;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a/gcd(a,b)*b;}
LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
//head
int main(){
ios::sync_with_stdio(false);
int t;
for(cin>>t;t;t--){
LL n,a,b;
cin>>n>>a>>b;
if(2*a<=b)cout<<1ll*n*a<<endl;
else {
cout<<(1ll*n/2*b+1ll*(n%2)*a)<<endl;
}
}
return 0;
}
B链接
分奇偶性,预处理前缀和,然后遍历每个位置,判断一下即可。
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <math.h>
#include <bitset>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#define MAXN 1010100
#define LL long long
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ll __int64
#define INF 0x7fffffff
#define cs(s) freopen(s,"r",stdin)
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
#define eps 1e-10
using namespace std;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a/gcd(a,b)*b;}
LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
//head
LL sum[200001],sumA[200001][2],sumB[200001],a[200001];
int main(){
ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],sum[i]=sum[i-1]+a[i];
sum[1]=a[1];
for(int i=1;i<=n;i++){
if(i%2)sumA[i][1]=sumA[i-1][1]+a[i],sumA[i][0]=sumA[i-1][0];
else sumA[i][0]=sumA[i-1][0]+a[i],sumA[i][1]=sumA[i-1][1];
}
int ans=0;
for(int i=1;i<=n;i++){
if(sumA[i-1][0]+sumA[n][1]-sumA[i][1]==sumA[i-1][1]+sumA[n][0]-sumA[i][0])ans++;
}
cout<<ans<<endl;
return 0;
}
C链接
模拟,题意是判断给的n2n^2n2个数能否组成一个回文矩阵。
分奇偶讨论:
n为偶数时,每个位置与之对称的位置有四个,即判断是否有一个数出现次数大于四,遍历14\frac{1}{4}41矩阵的每个位置即可。
n为奇数时,奇数与偶数不同的地方在于,必然有且仅有一个数出现了奇数次,这个数放正中间,然后遍历有四个对称位置的位置,放出现大于四次的即可,然后,中间行和中间列的每个元素与之对称的位置有两个,找出现大于两次的放即可。
若中间放的过程中,找不到满足的即输出-1。
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <math.h>
#include <bitset>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#define MAXN 1010100
#define LL long long
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ll __int64
#define INF 0x7fffffff
#define cs(s) freopen(s,"r",stdin)
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
#define eps 1e-10
using namespace std;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a/gcd(a,b)*b;}
LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
//head
int a[444],cnt[1111];
int ans[22][22];
int main(){
ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=1;i<=n*n;i++)cin>>a[i],cnt[a[i]]++;
if(n==1){cout<<"YES\n"<<a[1];return 0;}
if((n)%2){
int bj=0;
for(int k=1;k<=1000;k++){
if(cnt[k]%2!=0){ans[(n+1)/2][(n+1)/2]=k,bj=1;cnt[k]--;break;}
}
if(!bj)return cout<<"NO\n",0;
}
for(int i=1;i<=1000;i++){
if(cnt[i]%2)return cout<<"NO",0;
}
for(int i=1;i<=n/2;i++){
for(int j=1;j<=n/2;j++){
if(ans[i][j])continue;
int bj=0;
for(int k=1;k<=1000;k++){
if(cnt[k]>=4){
ans[i][j]=k;
ans[n-i+1][j]=k;
ans[i][n-j+1]=k;
ans[n-i+1][n-j+1]=k;
cnt[k]-=4;
bj=1;
break;
}
}
if(!bj){return cout<<"NO",0;}
}
}
if(n%2){
for(int j=1;j<=n/2;j++){
int bj=0;
for(int i=1;i<=1000;i++){
if(cnt[i]>=2){ans[j][(n+1)/2]=ans[n-j+1][(n+1)/2]=i,cnt[i]-=2;bj=1;break;}
}
if(!bj)return cout<<"NO",0;
}
for(int j=1;j<=n/2;j++){
int bj=0;
for(int i=1;i<=1000;i++){
if(cnt[i]>=2){ans[(n+1)/2][j]=ans[(n+1)/2][n-j+1]=i,cnt[i]-=2;bj=1;break;}
}
if(!bj)return cout<<"NO",0;
}
}
cout<<"YES\n";
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)cout<<ans[i][j]<<' ';
cout<<endl;
}
return 0;
}
F1链接
题意是找到最多数量的边。
这种边满足:去掉这条边之后分成的两个部分,不同时存在红色和蓝色。
做法:两次dfs
第一次dfs:从1开始dfs这颗树,记录当前节点可以遍历到的红色,蓝色的数量。
第二次dfs:从1开始dfs这棵树,设当前节点为uuu,下一个节点为vvv,显然,从1到vvv只能存在一个颜色,且另一个颜色只能存在于v−>nv->nv−>n,记录下答案即可。
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <math.h>
#include <bitset>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#define MAXN 1010100
#define LL long long
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ll __int64
#define INF 0x7fffffff
#define cs(s) freopen(s,"r",stdin)
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
#define eps 1e-10
using namespace std;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a/gcd(a,b)*b;}
LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
//head
const int N=3e5+11;
int n,a[N],ans;
vector<int>v[N];
int cnt[N][4];
void dfs1(int now,int pre){
cnt[now][a[now]]++;
for(auto k:v[now]){
if(k==pre)continue;
dfs1(k,now);
for(int j=0;j<3;j++)cnt[now][j]+=cnt[k][j];
}
}
void dfs2(int now,int pre){
for(auto k:v[now]){
if(k==pre)continue;
dfs2(k,now);
if(cnt[k][1]==0&&cnt[1][2]==cnt[k][2])ans++;
if(cnt[k][2]==0&&cnt[1][1]==cnt[k][1])ans++;
}
}
int main(){
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<n;i++){
int s,t;
cin>>s>>t;
v[s].pb(t);
v[t].pb(s);
}
dfs1(1,0);
dfs2(1,0);
cout<<ans<<endl;
return 0;
}
D链接
题意是,有n杯咖啡,m页作业,每杯咖啡只能喝一次。每天可以喝任意多杯咖啡。
假如有一天喝了k杯咖啡,那么这一天的总贡献为∑1kmax(aki−k+1,0)\sum_1^{k}max(a_{ki}-k+1,0)∑1kmax(aki−k+1,0)。
问 :最少要多少天能完成作业,或者完不成输出-1 。
做法:二分答案,上界n,下界1,ans初始为-1。
先将nnn杯咖啡按权值排序(大的优先)
每次checkcheckcheck当前天数midmidmid,nnn杯咖啡均摊给midmidmid天,依次递减,求出总贡献与m比较即可。
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <math.h>
#include <bitset>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#define MAXN 1010100
#define LL long long
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ll __int64
#define INF 0x7fffffff
#define cs(s) freopen(s,"r",stdin)
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
#define eps 1e-10
using namespace std;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a/gcd(a,b)*b;}
LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
//head
LL n;
LL a[200001],ans=-1;
LL m;
int cmp(int A,int b){
return A>b;
}
int ch(int k){
int cnt=0;
LL sum=0;
int res=0;
for(int i=1;i<=n;i++){
sum+=max(a[i]-cnt,0ll);
res++;
if(res==k)cnt++,res=0;
}
return sum>=m;
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
LL sum=0;
for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i];
if(sum<m)return cout<<-1,0;
else if(sum==m)return cout<<n,0;
sort(a+1,a+1+n,cmp);
LL l=1,r=n;
ans=-1;
while(l<=r){
LL mid=(l+r)/2;
if(ch(mid))r=mid-1,ans=mid;
else l=mid+1;
}
cout<<ans<<endl;
return 0;
}
E链接
题意:n对,k种颜色。
要求构造n对,满足:
(设每对的颜色为gi,big_i,b_igi,bi)
1.每一对的gi≠big_i \neq b_igi̸=bi。
2.k≤gi,bi≤kk \leq g_i,b_i \leq kk≤gi,bi≤k
3.不存在i,j(i≠j),bi=bj且gi=gji,j(i \neq j),b_i=b_j且g_i=g_ji,j(i̸=j),bi=bj且gi=gj。
4.1....n−1满足bi≠bi+1,gi≠gi+11....n-1满足b_i \neq b_{i+1},g_i \neq g_{i+1}1....n−1满足bi̸=bi+1,gi̸=gi+1。
显然k种颜色最多可以构造k∗(k−1)k*(k-1)k∗(k−1)组不同的对。n>k∗(k−1)n>k*(k-1)n>k∗(k−1)则不可能构造出来,即输出-1。
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <math.h>
#include <bitset>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#define MAXN 1010100
#define LL long long
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ll __int64
#define INF 0x7fffffff
#define cs(s) freopen(s,"r",stdin)
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
#define eps 1e-10
using namespace std;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a/gcd(a,b)*b;}
LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
//head
int a[200001];
int main(){
ios::sync_with_stdio(false);
int n,k;
cin>>n>>k;
if(n>1ll*k*(k-1))cout<<"NO\n";
else{
cout<<"YES\n";
for(int i=1;i<=k;i++){
a[i]=i+1;
if(a[i]==k+1)a[i]=1;
}
for(int i=1,j=1;i<=n;i++){
cout<<j<<' '<<a[j]<<endl;
a[j]++;
if(a[j]==k+1)a[j]=1;
j++;
if(j==k+1)j=1;
}
}
return 0;
}
Codeforces Round #540 (Div. 3)的更多相关文章
- Codeforces Round #540 (Div. 3) 部分题解
Codeforces Round #540 (Div. 3) 题目链接:https://codeforces.com/contest/1118 题目太多啦,解释题意都花很多时间...还有事情要做,就选 ...
- Codeforces Round #540 (Div. 3) A,B,C,D2,E,F1
A. Water Buying 链接:http://codeforces.com/contest/1118/problem/A 实现代码: #include<bits/stdc++.h> ...
- Codeforces Round #540 (Div. 3)--1118C - Palindromic Matrix
https://codeforces.com/contest/1118/problem/C 在查找元素的时候,必须按4,2,1的顺序进行.因为,如果先找1,可能就把原来的4拆散了,然后再找4,就找不到 ...
- Codeforces Round #540 (Div. 3)--1118F1 - Tree Cutting (Easy Version)
https://codeforces.com/contest/1118/problem/F1 #include<bits/stdc++.h> using namespace std; in ...
- Codeforces Round #540 (Div. 3)--1118D2 - Coffee and Coursework (Hard Version)
https://codeforces.com/contest/1118/problem/D2 和easy version的主要区别是,数据增加了. easy version采用的是线性查找,效率低 在 ...
- Codeforces Round #540 (Div. 3)--1118D1 - Coffee and Coursework (Easy version)
https://codeforces.com/contest/1118/problem/D1 能做完的天数最大不超过n,因为假如每天一杯咖啡,每杯咖啡容量大于1 首先对容量进行从大到小的排序, sor ...
- Codeforces Round #540 (Div. 3)题解
题目链接: https://codeforces.com/contest/1118 A题: 题意: q次查询,给你一个n,要你用1和2来凑出n,1的花费为a,2的花费为b,求花费的最小值. 思路: 我 ...
- Codeforces Round #540 (Div. 3) F1. Tree Cutting (Easy Version) 【DFS】
任意门:http://codeforces.com/contest/1118/problem/F1 F1. Tree Cutting (Easy Version) time limit per tes ...
- Codeforces Round #540 (Div. 3) D1. Coffee and Coursework (Easy version) 【贪心】
任意门:http://codeforces.com/contest/1118/problem/D1 D1. Coffee and Coursework (Easy version) time limi ...
- Codeforces Round #540 (Div. 3) C. Palindromic Matrix 【暴力】
任意门:http://codeforces.com/contest/1118/problem/C C. Palindromic Matrix time limit per test 2 seconds ...
随机推荐
- c语言笔记: 对 void *lpObj 进行类型转换时,一不留神,后果很严重
问题描述: 一个项目之前测试的时候一点问题没有,今天早上软件在一个特定的条件下出现崩溃情况,但并不是每次都会崩溃情,崩溃概率达到80%. 经过上午3个小时的排查,终于找到原因. 在项目中,我使用了一个 ...
- express框架学习笔记
用express框架也有一段时间了,下面我总结一下我做项目时迷惑的点: app.use()与app.get()的区别 app.use()是用来为应用程序绑定中间件的,当第一个参数是path是,第二个参 ...
- 第十一节、Harris角点检测原理(附源码)
OpenCV可以检测图像的主要特征,然后提取这些特征.使其成为图像描述符,这类似于人的眼睛和大脑.这些图像特征可作为图像搜索的数据库.此外,人们可以利用这些关键点将图像拼接起来,组成一个更大的图像,比 ...
- css的简单学习笔记
1.CSS的简介 *css :层叠样式表 **层叠: 一层一层. **样式表: 具有大量的属性和属性值 *使得页面的显示效果更加好. *css将网页内容和显示样式进行分离,提高了显示功能. *css不 ...
- (Bash博弈 大数) 51nod1068 Bash游戏 V3
1068 Bash游戏 V3 有一堆石子共有N个.A B两个人轮流拿,A先拿.每次拿的数量只能是2的正整数次幂,比如(1,2,4,8,16....),拿到最后1颗石子的人获胜.假设A B都非常聪明 ...
- node.js(小案例)_实现学生信息增删改
一.前言 本节内容主要对小案例做一个总结: 1.如何开始搭建小项目 2.路由设计 3.模块应用 4.项目源码以及实现过程github地址: 项目演示如下: 二.主要内容 1.项目的关键性js源码: 项 ...
- ajax 小练习
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equiv="Con ...
- python多重继承的钻石问题
如下,我们已经有了一个从Contact类继承过来的Friend类 class ContactList(list): def search(self, name): '''Return all cont ...
- MySQL中的主键,外键有什么作用详解
MySQL中的主键,外键有什么作用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学关系型数据库的同学,尤其在学习主键和外键时会产生一定的困惑.那么今天我们就把这个困惑连根拔起 ...
- 11:12:21.924 [main] DEBUG org.apache.ibatis.logging.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
11:12:21.924 [main] DEBUG org.apache.ibatis.logging.LogFactory - Logging initialized using 'class or ...