Summer training #5

B:分析序列 构造树(优先队列)

#include <bits/stdc++.h>
#include <cstring>
#include <iostream>
#include <algorithm>
#define foror(i,a,b) for(i=a;i<b;i++)
#define foror2(i,a,b) for(i=a;i>b;i--)
#define EPS 1.0e-8
#define PI acos(-1.0)
#define INF 3000000000
#define MOD 1000000009
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!
")
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
//using ll = long long;
//using ull= unsigned long long;
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que;
typedef long long ll;
vector<int> tree[8000];
int visit[8000];
int pop=0;
int pop1=1;
int scan[8000];
priority_queue<int, vector<int>, greater<int> > leaf;
int maxn=0;
int main()
{
 //freopen("in.txt", "r", stdin);
 //freopen("out.txt", "w", stdout);
 int now;
 //TS;
 while(scanf("%d ",&now)!=EOF)
 {
        scan[++pop]=now;
        maxn=max(maxn,now);
        visit[now]++;
 }
 //cout<<maxn<<endl;
 visit[maxn]++;
 //TS;
 for(int i=1;i<=maxn;i++)
 {
        if(visit[i]==0)
        {
        leaf.push(i);
        }
 }
 while(!leaf.empty())
 {
        int cur;
        cur= leaf.top();
        leaf.pop();
        tree[scan[pop1]].push_back(cur);
        //cout<<scan[pop1]<<"pushin:"<<cur<<endl;
        tree[cur].push_back(scan[pop1]);
        //cout<<cur<<"pushin:"<<scan[pop1]<<endl;
        if(--visit[scan[pop1]]==0)
        leaf.push(scan[pop1]);
        pop1++;
 }
 for(int i=1;i<=maxn;i++)
 {
        //printf("%d ",tree[i].size());
        sort(tree[i].begin(),tree[i].end());
        printf("%d:",i);
        for(int j=0;j<(int)tree[i].size();j++)
        {
        printf(" %d",tree[i][j]);
        }
        printf("
");
 }
  return 0;
}
View Code

C:求满足题意的正方形个数(二维前缀和 前缀和思想)  更难的相似的:http://agc015.contest.atcoder.jp/tasks/agc015_c

F: 打表找规律

#include <bits/stdc++.h>
#include <cstring>
#include <iostream>
#include <algorithm>
#define foror(i,a,b) for(i=a;i<b;i++)
#define foror2(i,a,b) for(i=a;i>b;i--)
#define EPS 1.0e-8
#define PI acos(-1.0)
#define INF 3000000000
#define MOD 1000000009
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!
")
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
//using ll = long long;
//using ull= unsigned long long;
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que;
typedef long long ll;
int main()
{
 //freopen("in.txt", "r", stdin);
 //freopen("out.txt", "w", stdout);
 int t;
 cin >> t;
 while(t--)
 {
        int s,k;
        scanf("%d %d",&s,&k);
        if(k%2==1)
        {
        if(s%2==0)
        {
        cout<<0<<endl;
        continue;
        }
        else
        {
        cout<<1<<endl;
        continue;
        }
        }
        else
        {
        /*int now=0;
        while(s>0)
        {
        now+=s%k;
        s/=k;
        }
        cout<<now<<endl;*/
        int now=s%(k+1);
        if(now%2==1)
        cout<<1<<endl;
        else
        {
        if(now==k)
        cout<<k<<endl;
        else
        cout<<0<<endl;
        }
        }
 }
  return 0;
}
View Code

G:水

H:二进制分析(lucky 测试数据没有失败的也没有要求最优解的)

#include <bits/stdc++.h>
#include <cstring>
#include <iostream>
#include <algorithm>
#define foror(i,a,b) for(i=a;i<b;i++)
#define foror2(i,a,b) for(i=a;i>b;i--)
#define EPS 1.0e-8
#define PI acos(-1.0)
#define INF 3000000000
#define MOD 1000000009
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!
")
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
//using ll = long long;
//using ull= unsigned long long;
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que;
typedef long long ll;
int er[100];
int er2[100];
int ans[100];
ll l,r;
int pop=0;
ll anser1=0;
void init(ll t)
{
 int pop=0;
 while(t>0)
 {
   er[pop++]=t%2;
   t=t/2;
 }
}
void init2(ll t)
{
 int pop=0;
 while(t>0)
 {
   er2[pop++]=t%2;
   t=t/2;
 }
}
ll now[100];
int main()
{
 //freopen("in.txt", "r", stdin);
 //freopen("out.txt", "w", stdout);
 mem(ans,-1);
 int flag=1;
 int have=0;
 int n;
 cin >> n;
 for(int i=1;i<=n;i++)
        cin>>now[i];
 for(int i=1;i<n;i++)
 {
        if(flag==0)
        break;
        mem(er,0);
        mem(er2,0);
        ll cur=now[i];
        ll next=now[i+1];
        init(cur);
        init2(next);
        int flag2=0;
        for(int j=59;j>=0;j--)
        {
        if(er[j]!=er2[j])
        {
        //        cout<< j<<endl;
        if(er[j]==0&&er2[j]==1)
        {
        if(ans[j]==-1)
        {
        ans[j]=0;
        have++;
        flag2=1;
        break;
        }
        else if(ans[j]==0)
        {
        flag2=1;
        break;
        }
        }
        else if(er[j]==1&&er2[j]==0)
        {
        if(ans[j]==-1)
        {
        ans[j]=1;
        have++;
        flag2=1;
        break;
        }
        else if(ans[j]==1)
        {
        flag2=1;
        break;
        }
        }
        }
        }
        if(flag2==0)
        flag=0;
 }
 if(flag==0)
 {
  cout<<0<<endl;
  return 0;
 }
 ll anser=1LL*1<<(60-have);
 cout<<anser<<endl;
  return 0;
}
View Code

I:数位DP 

#include <bits/stdc++.h>
#include <cstring>
#include <iostream>
#include <algorithm>
#define foror(i,a,b) for(i=a;i<b;i++)
#define foror2(i,a,b) for(i=a;i>b;i--)
#define EPS 1.0e-8
#define PI acos(-1.0)
#define INF 3000000000
#define MOD 1000000007
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!
")
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
//using ll = long long;
//using ull= unsigned long long;
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que;
typedef long long ll;
ll ans[2005][4];
void init()
{
        ans[1][1]=26,ans[1][2]=ans[1][3]=0;
        for(int i=1;i<=1999;i++)
        {
           ans[i+1][1]=(ans[i][1]+ans[i][2]+ans[i][3])*25%MOD;
           ans[i+1][2]=ans[i][1]%MOD,ans[i+1][3]=ans[i][2]%MOD;
        }
}
int main()
{
 //freopen("in.txt", "r", stdin);
 //freopen("out.txt", "w", stdout);
 init();
 int t;
 cin >> t;
 while(t--)
 {
        int n;
        scanf("%d",&n);
        ll anser=(ans[n][1]+ans[n][2]+ans[n][3])%MOD;
        cout<<anser<<endl;
 }
  return 0;
}
View Code
原文地址:https://www.cnblogs.com/Aragaki/p/7157935.html