Codeforces Round #654 (Div. 2)
C
题目
思路
- 我们首先要判断怎么才能不满足条件
- 首先显而易见的就是饼干数量少于人数就是一个
- 其次,当min = min(a,b)小于m的值,就不行,因为m是代表第二类客人,第二类客人是吃数量较少的饼干,我们可以讨论一下
- 若min ≥ \geq ≥ m,那么m个二类客人吃完之后就剩下一类客人,一类客人只要吃饼干数量较多的即可
- 反之,min < m,那么第二类客人无法满足,就失败
代码
#include <iostream>
#include <cstdio>
#include <set>
#include <list>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <string>
#include <sstream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <fstream>
#include <iomanip>
//#include <unordered_map>
using namespace std;
#define dbg(x) cerr << #x " = " << x << endl;
typedef pair<int, int> P;
typedef long long ll;
#define FIN freopen("in.txt", "r", stdin);
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--)
{
ll a, b, n, m;
cin >> a >> b>> n >> m;
if(a + b < n+ m || min(a, b) < m)
{
cout << "No" << endl;
}
else
{
cout << "YES" << endl;
}
}
return 0;
}
D
题目
思路
构造题
代码
#include <iostream>
#include <cstdio>
#include <set>
#include <list>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <string>
#include <sstream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <fstream>
#include <iomanip>
//#include <unordered_map>
using namespace std;
#define dbg(x) cerr << #x " = " << x << endl;
typedef pair<int, int> P;
typedef long long ll;
#define FIN freopen("in.txt", "r", stdin);
const int MAXN = 305;
int a[MAXN][MAXN];
void print(int n)
{
cout << "--------------------------" <<endl;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
cout << a[i][j];
}
cout << endl;
}
cout << "--------------------------" << endl;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
int n, k;
while(t--)
{
memset(a, 0, sizeof(a));
cin >> n >> k;
ll ans = 0;
if(k % n == 0)
{
ans = 0;
}
else
{
ans = 2;
}
int p = 0, q = 0;
while(k--)
{
a[p][q] = 1;
p++, q++, q %= n;
if(p == n)
{
p = 0, q++, q %= n;
}
}
cout << ans << endl;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
cout << a[i][j];
}
cout << endl;
}
}
return 0;
}
E1
题目
代码
#include <iostream>
#include <cstdio>
#include <set>
#include <list>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <string>
#include <sstream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <fstream>
#include <iomanip>
//#include <unordered_map>
using namespace std;
#define dbg(x) cerr << #x " = " << x << endl;
typedef pair<int, int> P;
typedef long long ll;
#define FIN freopen("in.txt", "r", stdin);
const int MAXN = 2005;
int a[MAXN];
int cnt[MAXN];
vector<int> ans;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, p;
cin >> n >> p;
int ed = -1;
for(int i = 0; i < n; i++)
{
cin >> a[i];
ed = max(ed, a[i]);
}
sort(a, a+n);
int st = ed - n + 1;
for(int i = st; i <= ed; i++)
{
memset(cnt, 0, sizeof(cnt));
int flg = 0;
for(int j = 0; j < n; j++)
{
if(i + j >= a[j])
{
cnt[max(0, a[j] - i)]++;
cnt[j + 1]--;
}
else
{
flg = 1;
break;
}
}
if(flg) continue;
for(int j = 1; j < n; j++)
{
cnt[j] = cnt[j - 1] + cnt[j];
}
flg = 0;
for(int j = 0; j < n; j++)
{
if(cnt[j] % p == 0)
{
flg = 1;
break;
}
}
if(flg)
{
continue;
}
ans.push_back(i);
}
cout << ans.size() << endl;
for(auto x : ans)
{
cout << x << ' ';
}
cout << endl;
return 0;
}