AtCoder Beginner Contest 154
A.題意:入出力を見ればいい
考え方:この問題は難しくありませんが、私は行くとmapを使いたいと思って、それからとても悲しんで、mapの中で人はキー値によってあなたにソートして、だから出力する時間違いがあります!
ACしかし私はmapを使いたいので、私は2つ開いて、stringが一致する時mapの値は増加しませんが、一致しない値は、1をプラスします.これでACができるなんて、強情だよ!!mapを使って、1つのサインを20分以上しました.
B水题标题:长さはどのくらい出力して何文字、もとはこれはやっと署名して问题に着きます!!!読めばA!
Cリンク题意:あなたに1组のデータをあげた后に、中に重複するデータがあるかどうかを闻いて、无ければYESを出力して、さもなくばNOを出力します!
構想:最初は複雑すぎて、配列を開くことを考えて、それから入力する時にそれを処理して、一度現れたことがあるならば私はその位置に1を加えて、しかしこのように配列を開くのはとても浪費して、空間を占有して大きくて、ここにはまだ1 e 9まで循環すると、コンパイルは成功しません.だから私はテスト時にそれを縮小して実行することができて、疑問???
ACそしてSTL setには脱重効果があると思いますので、入力時にセットに追加してsizeサイズを見ればいいと思います
Dタイトルリンクここでは、データのセットをあげて、そこから連続するk個の数を選んで、このk個の数を1~kの間の乱数に再設定して、取れる最大の期待を求めます.
構想:私のこのテーマは暴力でやったので、私は配列を遍歴して、毎回k個の数を取って私は彼らの期待を求めて、それから絶えず更新して、最後に答えを得て、残念ながらタイムアウトしました
Sample Input 1
5 3 1 2 2 4 5 Sample Output 1
7.000000000000
ACの考え方の差は多くないのか、それとも最大値を求めることを遍歴しているのか、しかし平均値を求める時、私たちはこのように考えることができて、自分が1~kから取ったので、sumはすべての最大の価値の総和で、それではmは何個で1,11,1...、変動する必要がある最小の価値の総和です.だから加算して2で割るといい!!(上記よりもここで最適化)
問題:ただ問題を見ただけだ
Eテーマリンク
あとで补给します!!!F
red blue
3 4
red
2 4
考え方:この問題は難しくありませんが、私は行くとmapを使いたいと思って、それからとても悲しんで、mapの中で人はキー値によってあなたにソートして、だから出力する時間違いがあります!
#include
#define pair p
using namespace std;
map<string,int> st;
int main(){
string s1;
string s2;
cin>>s1>>s2;
int n,m;
cin>>n>>m;
//st.insert(p(s1,n));
//st.insert(p(s2,m));
st[s1] = n;
st[s2] = m;
string ss;
cin>>ss;
st[ss]--;
//map::iterator it
for(auto it=st.begin();it!=st.end();it++){
//cout<first<second<
cout<<it->second<<" ";
}
return 0;
}
ACしかし私はmapを使いたいので、私は2つ開いて、stringが一致する時mapの値は増加しませんが、一致しない値は、1をプラスします.これでACができるなんて、強情だよ!!mapを使って、1つのサインを20分以上しました.
#include
using namespace std;
//pair p;
map<string,int> st;
map<string,int> sd;
int main(){
string s1;
string s2;
cin>>s1>>s2;
int n,m;
cin>>n>>m;
st[s1] = n;
sd[s2] = m;
string ss;
cin>>ss;
st[ss]++;
sd[ss]++;
int len1 = st.size();
int len2 = sd.size();
if(len1 == 2){
cout<<n<<" "<<m-1<<endl;
}
if(len2 == 2){
cout<<n-1<<" "<<m<<endl;
}
return 0;
}
B水题标题:长さはどのくらい出力して何文字、もとはこれはやっと署名して问题に着きます!!!読めばA!
#include
using namespace std;
int main(){
string s;
cin>>s;
int len = s.length();
for(int i=0;i<len;i++){
cout<<"x";
}
return 0;
}
Cリンク题意:あなたに1组のデータをあげた后に、中に重複するデータがあるかどうかを闻いて、无ければYESを出力して、さもなくばNOを出力します!
構想:最初は複雑すぎて、配列を開くことを考えて、それから入力する時にそれを処理して、一度現れたことがあるならば私はその位置に1を加えて、しかしこのように配列を開くのはとても浪費して、空間を占有して大きくて、ここにはまだ1 e 9まで循環すると、コンパイルは成功しません.だから私はテスト時にそれを縮小して実行することができて、疑問???
#include
#define maxn 200005
using namespace std;
typedef long long ll;
ll a[maxn];
ll vis[1000000];
int main(){
int n;
cin>>n;
int flag = 0;
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++){
cin>>a[i];
vis[a[i]]++;
}
for(ll i=0;i<=1000000;i++){
if(vis[i]>=2){
cout<<"NO"<<endl;
flag = 1;
break;
}
}
if(!flag){
cout<<"YES"<<endl;
}
return 0;
}
ACそしてSTL setには脱重効果があると思いますので、入力時にセットに追加してsizeサイズを見ればいいと思います
#include
#define maxn 200005
using namespace std;
typedef long long ll;
ll a[maxn];
int main(){
int n;
cin>>n;
set<ll> st;
for(int i=0;i<n;i++){
cin>>a[i];
st.insert(a[i]);
}
if(st.size() == n){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
return 0;
}
Dタイトルリンクここでは、データのセットをあげて、そこから連続するk個の数を選んで、このk個の数を1~kの間の乱数に再設定して、取れる最大の期待を求めます.
構想:私のこのテーマは暴力でやったので、私は配列を遍歴して、毎回k個の数を取って私は彼らの期待を求めて、それから絶えず更新して、最後に答えを得て、残念ながらタイムアウトしました
Sample Input 1
5 3 1 2 2 4 5 Sample Output 1
7.000000000000
#include
#define maxn 200005
using namespace std;
int a[maxn];
double check(double n){
double ans = 0.0;
for(int i=1;i<=n;i++){
ans += (1.0/n)*i;
}
return ans;
}
int main(){
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>a[i];
}
double res = -1.0;
double sum;
for(int i=0;i<n-k+1;i++){
sum = 0.0;
for(int j=i,l=1;l<=k;j++,l++){
sum += check((double)a[j]);
}
res = max(res,sum);
}
printf("%.12lf",res);
return 0;
}
ACの考え方の差は多くないのか、それとも最大値を求めることを遍歴しているのか、しかし平均値を求める時、私たちはこのように考えることができて、自分が1~kから取ったので、sumはすべての最大の価値の総和で、それではmは何個で1,11,1...、変動する必要がある最小の価値の総和です.だから加算して2で割るといい!!(上記よりもここで最適化)
#include
using namespace std;
const int N = 200000 + 10;
int n, m;
int a[N];
int mmax = -1;
int sum;
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= m; i++) {
sum += a[i];
}
mmax = sum;
int k = 1;
for (int i = m+1; i <= n; i++, k++) {
sum = sum - a[k] + a[i];
//cout << a[k] << " " << a[i] << endl;
mmax = max(mmax, sum);
}
double d;
d = mmax;
printf("%.12lf", (d + m) / 2);
return 0;
}
問題:ただ問題を見ただけだ
Eテーマリンク
あとで补给します!!!F
#pragma region
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
//#define rep(i, s, e) for (int(i) = (s); (i) < (e); ++(i))
#define rep(i, e) for (int(i) = 0; (i) < (e); ++(i))
#define all(x) x.begin(),x.end()
#pragma endregion
#pragma region Combination
const int MAX = 2002002;
const int MOD = 1000000007;
long long fac[MAX], finv[MAX], inv[MAX];
// テーブルを る
void COMinit()
{
fac[0] = fac[1] = 1;
finv[0] = finv[1] = 1;
inv[1] = 1;
for (int i = 2; i < MAX; i++)
{
fac[i] = fac[i - 1] * i % MOD;
inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD;
finv[i] = finv[i - 1] * inv[i] % MOD;
}
}
//
long long COM(int n, int k)
{
if (n < k) return 0;
if (n < 0 || k < 0) return 0;
return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}
#pragma endregion
int main()
{
COMinit();
int r1, c1, r2, c2; cin >> r1 >> c1 >> r2 >> c2;
ll res = COM(r2 + c2 + 2, r2 + 1) - 1 + MOD;
res -= (COM(r1 + c2 + 1, r1) - 1);
res -= (COM(r2 + c1 + 1, c1) - 1);
res += (COM(r1 + c1, r1) - 1);
res %= MOD;
cout << res << endl;
}