CF634(div.3)A~D
http://codeforces.com/contest/1335
这几个题比较简单,笔记就放在一起写了,E1E2有时间单独写一篇。
A. Candies and Two Sisters
题目描述
给你 \(n\) 个糖果分成 \(a,b\) 两份,要求 \(a>b>0\),询问有多少种分法。
解题
\(ans = (n-1)/2\)
for i in range(int(input())):
n = int(input())
print((n-1)//2)
B. Construct the String
题目描述
要求构造一个长度为 \(n\) 的字符串,保证其中每长度为 \(a\) 的连续子段中,有 \(b\) 种不同的字符。
解题
在子段中前 \(a-b+1\) 个字符全部用同一个,然后再补上 \(b-1\) 个不同的字符,最后以该子段循环生成字符串则为答案。
例如 \(a=5,b=3\) ,则可以用 \(aaabc\) 循环生成得到答案 \(aaabcaaabcaaabcaaa...\)
#include
#define ll long long
#define fr(i,n) for(int i=0;i=j;i--)
#define frrs(i,j,n,flag) for(int i=j;i=j&&flag;i--)
#define arend(i,n) ((i!=n-1)?" ":"\n")
#define memset0(dp) memset(dp,0,sizeof(dp))
#define print_arr(begin,end) for(auto it = begin;it!=end;it++) cout<<*it<>a;return a;}
string to_str(double a) {stringstream ss;ss<>t){
while(t--){
int a,b,n;
cin>>n>>a>>b;
int p = a - b + 1,l = 0;
while(l'z'){
c = 'a';
}
cout<
C. Two Teams Composing
题面描述
从 \(n\) 个数字中选出一部分分成两组,要求第一组数字全部不同,第二组数字全部相同,而且两个组大小相同,询问分组的可以达到的最大大小。
解题
把重复最多的数字全部拿出来,用来组成第二组。然后再从剩下的数字中,尽可能多的挑选以组成第一组。如果此时第二组的大小比第一组多两个或以上,那么第二组可以分给第一组一个数字。
这样既可以得到最大的组大小。
#include
#define ll long long
#define fr(i,n) for(int i=0;i=j;i--)
#define frrs(i,j,n,flag) for(int i=j;i=j&&flag;i--)
#define arend(i,n) ((i!=n-1)?" ":"\n")
#define memset0(dp) memset(dp,0,sizeof(dp))
#define print_arr(begin,end) for(auto it = begin;it!=end;it++) cout<<*it<>a;return a;}
string to_str(double a) {stringstream ss;ss<>t){
while(t--){
int n;cin>>n;
fr(i,n) cta[i] = 0;
int inp;
int unsamenum = 0;
int maxnum = 0;
fr(i,n){
cin>>inp;
if(cta[inp-1]==0) unsamenum++;
cta[inp-1]++;
maxnum = max(maxnum,cta[inp-1]);
}
int ans = min(unsamenum-1,maxnum);
if(maxnum-2>=unsamenum-1){
ans++;
}
cout<
D. Anti-Sudoku
题面描述
给一个填好的 \(9*9\) 数独表,可以对其中的数字进行 \(9\) 次修改,要求实现以下条件:
- 每一行至少存在一个数字出现两次或以上
- 每一列至少存在一个数字出现两次或以上
- 每一个加粗的 \(3*3\) 小方块中至少存在一个数字出现两次或以上
解题
把原来的数独表中所有的 \(9\) 改成 \(1\),这样你就得到了每行每列每块中都有两个 \(1\) 的 anti-数独表。
#include
#define ll long long
#define fr(i,n) for(int i=0;i=j;i--)
#define frrs(i,j,n,flag) for(int i=j;i=j&&flag;i--)
#define arend(i,n) ((i!=n-1)?" ":"\n")
#define memset0(dp) memset(dp,0,sizeof(dp))
#define print_arr(begin,end) for(auto it = begin;it!=end;it++) cout<<*it<>a;return a;}
string to_str(double a) {stringstream ss;ss<>t){
while(t--){
fr(i,9){
fr(j,9){
cin>>a[i][j];
}
}
fr(i,9){
fr(j,9){
if(a[i][j]=='9'){
cout<<"1";
}else{
cout<