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<bits/stdc++.h>
#define ll long long
#define fr(i,n) for(int i=0;i<n;i++)
#define frs(i,n,flag) for(int i=0;i<n&&flag;i++)
#define frr(i,j,n) for(int i=j;i<n;i++)
#define r_frr(i,j,n) for(int i=n-1;i>=j;i--)
#define frrs(i,j,n,flag) for(int i=j;i<n&&flag;i++)
#define r_frrs(i,j,n,flag) for(int i=n-1;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<<arend(it,end);
#define log_this(name,value) cout<<name<<": "<<value<<endl;
#define e4 10004
#define e5 100005
#define e6 1000006
#define e7 10000007
#define e9 1000000000
#define INF 9999999
using namespace std;
int to_int(string s) {stringstream ss;ss<<s;int a;ss>>a;return a;}
string to_str(double a) {stringstream ss;ss<<a;return ss.str();}
int main(){
cin.tie(0);
//ios::sync_with_stdio(false);
//cout<<setiosflags(ios::fixed)<<setprecision(0);
//freopen("1.out","w",stdout);
int t;
while(cin>>t){
while(t--){
int a,b,n;
cin>>n>>a>>b;
int p = a - b + 1,l = 0;
while(l<n){
char c = 'a';
frrs(i,0,p,l<n){
cout<<c;
l++;
}
frrs(i,0,a-p,l<n){
c++;if(c>'z'){
c = 'a';
}
cout<<c;
l++;
}
}
cout<<endl;
}
}
return 0;
}
C. Two Teams Composing
題面描述
從 \(n\) 個數字中選出一部分分成兩組,要求第一組數字全部不同,第二組數字全部相同,而且兩個組大小相同,詢問分組的可以達到的最大大小,
解題
把重復最多的數字全部拿出來,用來組成第二組,然后再從剩下的數字中,盡可能多的挑選以組成第一組,如果此時第二組的大小比第一組多兩個或以上,那么第二組可以分給第一組一個數字,
這樣既可以得到最大的組大小,
#include<bits/stdc++.h>
#define ll long long
#define fr(i,n) for(int i=0;i<n;i++)
#define frs(i,n,flag) for(int i=0;i<n&&flag;i++)
#define frr(i,j,n) for(int i=j;i<n;i++)
#define r_frr(i,j,n) for(int i=n-1;i>=j;i--)
#define frrs(i,j,n,flag) for(int i=j;i<n&&flag;i++)
#define r_frrs(i,j,n,flag) for(int i=n-1;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<<arend(it,end);
#define log_this(name,value) cout<<name<<": "<<value<<endl;
#define e4 10004
#define e5 100005
#define e6 1000006
#define e7 10000007
#define e9 1000000000
#define INF 9999999
using namespace std;
int to_int(string s) {stringstream ss;ss<<s;int a;ss>>a;return a;}
string to_str(double a) {stringstream ss;ss<<a;return ss.str();}
int cta[2*e5];
int main(){
cin.tie(0);
//ios::sync_with_stdio(false);
//cout<<setiosflags(ios::fixed)<<setprecision(0);
//freopen("1.out","w",stdout);
int t;
while(cin>>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<<ans<<endl;
}
}
return 0;
}
D. Anti-Sudoku
題面描述
給一個填好的 \(9*9\) 數獨表,可以對其中的數字進行 \(9\) 次修改,要求實作以下條件:
- 每一行至少存在一個數字出現兩次或以上
- 每一列至少存在一個數字出現兩次或以上
- 每一個加粗的 \(3*3\) 小方塊中至少存在一個數字出現兩次或以上
解題
把原來的數獨表中所有的 \(9\) 改成 \(1\),這樣你就得到了每行每列每塊中都有兩個 \(1\) 的 anti-?數獨表,
#include<bits/stdc++.h>
#define ll long long
#define fr(i,n) for(int i=0;i<n;i++)
#define frs(i,n,flag) for(int i=0;i<n&&flag;i++)
#define frr(i,j,n) for(int i=j;i<n;i++)
#define r_frr(i,j,n) for(int i=n-1;i>=j;i--)
#define frrs(i,j,n,flag) for(int i=j;i<n&&flag;i++)
#define r_frrs(i,j,n,flag) for(int i=n-1;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<<arend(it,end);
#define log_this(name,value) cout<<name<<": "<<value<<endl;
#define e4 10004
#define e5 100005
#define e6 1000006
#define e7 10000007
#define e9 1000000000
#define INF 9999999
using namespace std;
int to_int(string s) {stringstream ss;ss<<s;int a;ss>>a;return a;}
string to_str(double a) {stringstream ss;ss<<a;return ss.str();}
char a[9][9];
int main(){
cin.tie(0);
//ios::sync_with_stdio(false);
//cout<<setiosflags(ios::fixed)<<setprecision(0);
//freopen("1.out","w",stdout);
int t;
while(cin>>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<<a[i][j];
}
}
cout<<endl;
}
}
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/60073.html
標籤:其他
