【备战昆明站】0307 做题越多,悲伤越多(cf775+上海站的题目)
距离昆明场33天
神啊,如果你真的存在的话,请允许我完成拿奖牌的小小心愿吧
到现在才知道memset并非是最快的,有时候手动会更快。
迟来的未知,究竟是一种幸运,还是一种不幸呢?
codeforces 775 div 2
https://codeforces.com/contest/1649
昨天下午打的,很是艰难。c题因为long long问题第一次被hack。
A. Game
题干太搞了,直接找离两边最近的0的位置,然后相减。
#include<bits/stdc++.h>
using namespace std;
const int N = 200;
bool a[N];
int main() {
int tc;
cin >> tc;
while(tc--) {
int n;
cin >> n;
int l = -1, r = -1;
for(int i = 1 ; i <= n ; i++) {
cin >> a[i];
}
for(int i = 1 ; i <= n ; i++) {
if(a[i] == 0) {
l = i-1;
break;
}
}
for(int i = n ; i >= 1 ; i--) {
if(a[i] == 0) {
r = i+1;
break;
}
}
cout << r-l << endl;c++
}
}
B. Game of Ball Passing
想复杂了。冥冥之中好像做过。我居然把他变成图论问题了。
府库咋此の梦达一你抗糖卡伊
#include<bits/stdc++.h>
using namespace std;
const int N = 3e5;
long long a[N];
long long diff[N];
int main() {
int tc;
scanf("%d",&tc);
while(tc--) {
int n;
scanf("%d",&n);
for(int i = 1 ; i <= n ; i++)
scanf("%lld",&a[i]);
sort(a+1,a+n+1);
long long sum = 0;
for(int i = 1 ; i <= n ; i++) {
sum += a[i];
}
if(sum == 0){
cout << 0 << endl;
continue;
}
sum++;
sum -= (a[n] - a[n-1]);
sum -= a[n-1]*2;
if(a[n]-a[n-1] > sum) {
cout << a[n]-a[n-1]-sum + 1 << endl;
}
else cout << 1 << endl;
}
}
C. Weird Sum
队友单开的题目。如果不是群友说前缀合我应该还会再做一会儿。。
还是靠我ac
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 +7;
vector<int>h[N],c[N];
int main() {
long long sum;
// scanf("%d",&tc);
// while(tc--) {
sum=0;
int n,m;
scanf("%d%d",&n,&m);
for(int i = 1 ; i <= n ; i++ ) {
for(int j = 1 ; j <= m ; j++) {
int t;
scanf("%d",&t);
h[t].push_back(j);
c[t].push_back(i);
}
}
for(int i = 1 ; i < N ; i++) {
if(h[i].size() <= 1)
continue;
sort(h[i].begin() , h[i].end());
sort(c[i].begin() , c[i].end());
for(int j = 1 ; j < h[i].size() ; j++) {
sum += (long long)(h[i][j]-h[i][j-1])*j*(long long)(h[i].size()-j);
sum += (long long)(c[i][j]-c[i][j-1])*j*(long long)(c[i].size()-j);
}
}
cout<<sum<<endl;
}
不过赛后被hack了,longlong问题。气死我了
我最终只过了两题:(
D. Integral Array
今早看明白的一题(其实不是很明白)
很是暴力,没有和队友一起思考,很是惋惜。cherry,私密马森。。
#include<bits/stdc++.h>
using namespace std;
const int N = 3e6 + 7;
long long pre[N],vis[N];
int main() {
int tc;
scanf("%d",&tc);
while(tc--) {
// memset(pre,0,sizeof(pre));
// memset(vis,0,sizeof(vis));
int n,c;
scanf("%d%d",&n,&c);
memset(vis,0,8*3*c+1);
for(int i = 1 ; i <= n ; i++ ) {
int t;
scanf("%d",&t);
vis[t] = 1;
}
pre[0] = 0;
for(int i = 1 ; i <= 3*c ; i++ ) {
pre[i] = pre[i-1] + vis[i];//前缀合
}
if(vis[1] == 0) {
printf("No\n");
continue;
}
bool flag = 1;
for(int r = 1 ; r <= c && flag; r++) {
for(int y = 1 ; y*(r+1) <= 3*c ; y++) {
if(!vis[y])
continue;
if(pre[(r+1)*y-1] -pre[(r*y-1)] && (!vis[r])) {
flag = 0;
break;
}
}
}
if(flag)
printf("Yes\n");
else printf("No\n");
}
}

浙公网安备 33010602011771号