Codeforces Round #419 (Div. 2)
来源:互联网 发布:js判断ie版本是否大于8 编辑:程序博客网 时间:2024/04/30 09:25
A
过几分钟回文。
#include <cstdio>#include <cstring>#include <iostream>using namespace std;bool check(int hour,int min){ int t1=hour/10; int t2=hour%10; int t3=min/10; int t4=min%10; if(t1!=t4) return 0; if(t2!=t3) return 0; return 1;}int main(){ int hour,min; scanf("%d:%d",&hour,&min); if(check(hour,min)){ puts("0"); return 0; } for(int i=1;;i++){ min++; if(min==60){ hour++; min=0; } if(hour==24){ hour=0; } if(check(hour,min)){ printf("%d\n",i); return 0; } } return 0;}
B
n个菜单,每个菜单在[l,r]区间是好的。
统计[L,R]区间 菜单是好的的个数 >=k 的点。
对于[l,r]
presum[l]++
presum[r+1]–
然后求前缀和的时候就相当于presum[l..r]++了
前缀和统计+树状数组。
#include <bits/stdc++.h>using namespace std;const int maxn = 200000;int presum[200005],n,k,q,l,r;int A[maxn*4];int lowbit(int x){ return x&(-x); }void add(int id){ while(id<=maxn){ A[id]++; id+=lowbit(id); }}int ask(int id){ int sum=0; while(id){ sum+=A[id]; id-=lowbit(id); } return sum;}int main(){ freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); scanf("%d%d%d",&n,&k,&q); for(int i=1;i<=n;i++){ scanf("%d%d",&l,&r); presum[l]++; presum[r+1]--; } for(int i=1;i<=maxn;i++) presum[i]+=presum[i-1]; for(int i=1;i<=maxn;i++) if(presum[i]>=k) add(i); for(int i=1;i<=q;i++){ scanf("%d%d",&l,&r); int sum = ask(r) - ask(l-1); printf("%d\n",sum); } return 0;}
C
类似消消乐吧。
直接贪心消除。
注意最小这个条件。
于是需要选择先消列还是行。
先消效益高的,就是数值小的那一个。
#include<bits/stdc++.h>using namespace std;const int maxn = 150;int g[maxn][maxn];int minr[maxn],minc[maxn];int main(){ ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); int n,m; cin>>n>>m; memset(minr,63,sizeof minr); memset(minc,63,sizeof minc); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>g[i][j]; int sum=0; if(n<=m){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) minr[i]=min(minr[i],g[i][j]); sum+=minr[i]; for(int j=1;j<=m;j++) g[i][j]-=minr[i]; } for(int j=1;j<=m;j++){ for(int i=1;i<=n;i++) minc[j]=min(minc[j],g[i][j]); sum+=minc[j]; for(int i=1;i<=n;i++) g[i][j]-=minc[j]; } } else{ for(int j=1;j<=m;j++){ for(int i=1;i<=n;i++) minc[j]=min(minc[j],g[i][j]); sum+=minc[j]; for(int i=1;i<=n;i++) g[i][j]-=minc[j]; } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) minr[i]=min(minr[i],g[i][j]); sum+=minr[i]; for(int j=1;j<=m;j++) g[i][j]-=minr[i]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) if(g[i][j]){ puts("-1"); return 0; } } cout<<sum<<endl; for(int i=1;i<=n;i++) if(minr[i]){ for(int k=1;k<=minr[i];k++) cout<<"row "<<i<<endl; } for(int i=1;i<=m;i++) if(minc[i]){ for(int k=1;k<=minc[i];k++) cout<<"col "<<i<<endl; } return 0;}
阅读全文
0 0
- Codeforces Round #419 (Div. 2)
- Codeforces Round #419 (Div. 2)
- Codeforces Round #419 (Div. 2)
- Codeforces Round #419 (Div. 2)
- Codeforces Round #419 (Div. 2)
- Codeforces Round #419 (Div. 2)(A+B)
- Codeforces Round #419 (Div. 2) D
- Codeforces Round #419 (Div. 2) 题解
- Codeforces Round #419 (Div. 2) A
- Codeforces Round#419 (div.1)
- Codeforces Round #102 (Div. 2)
- Codeforces Round #103 (Div. 2)
- Codeforces Round #103 (Div. 2)
- Codeforces Round #104 (Div. 2)
- Codeforces Round #105 (Div. 2)
- Codeforces Round #105 (Div. 2)
- Codeforces Round #107 (Div. 2)
- Codeforces Round #108 (Div. 2)
- scikit-learn 中的随机森林用法
- 观点:深度学习,先跟上再说
- 线程
- Linux下搭建集群环境(2)-----------linux下安装Mysql
- cloudera反向解析问题
- Codeforces Round #419 (Div. 2)
- node.js多种路由功能
- codeforces Karen and Coffee (区间贡献 思维)
- 关于thinkphp写入缓存失败的原因
- Java 8 Map sort
- MySQL
- 音视频集中营1-音频的录制
- Linux网络编程--recv函数返回值详解
- 效法曾国藩