Codeforces#443
来源:互联网 发布:vim c语言语法高亮 编辑:程序博客网 时间:2024/06/05 20:00
比赛地址:Codeforces Round #443 (Div. 2)
A. Borya’s Diagnosis
题意:
有n个诊所,在特定的时间开放,问看完所有的诊所的时间。
题解:
略。
代码:
#include<iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <stack>#include <string>#include <map>using namespace std;int main() { int N; long long pre = 0; cin >> N; for (int i = 0; i < N; i++) { long long temp1, temp2; cin >> temp1 >> temp2; if (temp1 > pre) { pre = temp1; } else if (temp1 == pre) { pre = temp1 + temp2; }else { long long t = (pre - temp1) / temp2; pre = temp1 + (t + 1) * temp2; } } cout << pre << endl; return 0;}
B. Table Tennis
题意:
每次队伍头两个人比赛,输的拍到队尾,问哪个人最先赢k次。
题解:
当k>=N-1的时候直接求最大,否则模拟下。
代码:
#include<iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <stack>#include <string>#include <map>#include <queue>using namespace std;int main() { queue<long long> q; long long N, K; long long ans = 0; cin >> N >> K; for (int i = 0; i < N; i++) { int temp; cin >> temp; q.push(temp); } if (K >= N || N <= 2) { while (!q.empty()) { ans = max(ans, q.front()); q.pop(); } cout << ans << endl; } else { int cnt = 1; int now; int temp1, temp2; temp1 = q.front(); q.pop(); temp2 = q.front(); q.pop(); now = max(temp1, temp2); q.push(min(temp1, temp2)); while (cnt < K) { temp1 = q.front(); q.pop(); if( temp1 > now ){ q.push(now); now = temp1; cnt = 1; } else { q.push(temp1); cnt++; } } cout << now << endl; } return 0;}
C. Short Program
题意:
给定n个操作,这些操作包含&、|、^。用五个以内的操作来代替这些操作。
题解:
直接观察每一位的最后变化,
如果1变0,0变1,则该位^如果都变1,则|如果都变0,则&否则不变
代码:
#include<iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <stack>#include <string>#include <map>#include <queue>using namespace std;int main() { int N; int t1 = (1 << 10) - 1; int t2 = 0; cin >> N; for (int i = 0; i < N; i++) { string s; int temp; cin >> s >> temp; if (s == "|") { t1 |= temp; t2 |= temp; } else if( s == "&" ) { t1 &= temp; t2 &= temp; } else { t1 ^= temp; t2 ^= temp; } } int ans1, ans2, ans3; ans1 = (1 << 10) - 1; ans2 = ans3 = 0; for (int i = 0; i < 10; i++) { if ((t1&(1 << i)) && (t2&(1 << i))) { ans2 |= (1 << i); } else if (!(t1&(1 << i)) && !(t2&(1 << i))) { ans1 ^= (1 << i); } else if(!(t1&(1 << i)) && (t2&(1 << i))){ ans3 |= (1 << i); } } cout << 3 << endl; cout << "& " << ans1 << endl; cout << "| " << ans2 << endl; cout << "^ " << ans3 << endl; return 0;}
D. Teams Formation
题意:
m个长度为n的数组排成一列,当每有k个相同的数的时候消掉,求问最后剩余几个数
题解:
首先预处理数组,该数组不能再消了,然后从l、r考虑能不能继续消除,然后一直消除到不能再消除了。
代码:
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#define For(i,a) for(int i=1;i<=a;++i)#define F(i,a,b) for(int i=a;i<=b;++i)#define dFor(i,a) for(int i=a;i>=1;--i)#define dF(i,a,b) for(int i=a;i>=b;--i)#define F2(i,a,b) for(int i=a;i<b;++i)#define eF(h,i,u) for(int i=h[u];i;i=nxt[i])using namespace std;int n,m,k,s[100009];int a[100009],b[100009],t=0;long long ans=0;void init(){ scanf("%d%d%d",&n,&k,&m); For(i,n) scanf("%d",s+i); For(i,n){ if(s[i]!=a[t]) a[++t]=s[i], b[t]=1; else{ ++b[t]; if(b[t]==k) ans+=k, --t; } } ans*=m;}int main(){ init();// For(i,t) printf("%d %d, ",a[i],b[i]); puts("");// printf("%I64d\n",ans); int l=1, r=t; while(l<=r){ if(a[l]!=a[r]) break; if(l==r) {ans+=1ll*b[l]*m/k*k; break;} if(b[l]+b[r]>=k){ ans+=1ll*k*(m-1); if(b[l]+b[r]==k) ++l, --r; else break; }else break; }// if(l==r&&1ll*b[l]*m%k==0) ans=1ll*n*m; if(l==r && (b[1] + b[t])%k == 0 &&1ll*b[l]*m%k==0 )ans = 1ll*n*m; printf("%I64d",1ll*n*m-ans);}
阅读全文
0 0
- Codeforces#443
- COdeforces 443A
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- CSS 適配裝置
- vb.net的异步读写数据流(使用线程、委托)
- 连接查询和分组查询
- 如何很好的使用Linq的Distinct方法
- java 中遍历目录下所有文件
- Codeforces#443
- 【1701H1】【穆晨】【171027】连续第十七天总结
- ?attr/selectableItemBackground的使用(TypedArray,TypedValue)
- AndroidStudio之NDK开发CMake CMakeLists.txt编写入门
- ES6-字符串扩展-模板字符串
- dwg文件怎么与dxf文件互转
- 第三章 输出满足1+2+3+...n<8888的最大正整数n 。
- 使用JSON.parse解析JSON数据时,出现报错
- 日常笔记之Android系统下移植WIFI驱动