Codeforces ---- Hello 2020

3898 단어 codeforces
하하하, 투어리스트가 끊겼어요. 랭크4가 됐어요. 왠지 즐거워요. 하하하.
나는 최종 테스트를 끊지 않았다. 나는 파랗다!하하하하, 오랫동안 안 쳤는데 정말 생각지도 못했어. 그렇게 힘들게 쳤는데 최종 테스트도 안 끊고 파랗게 됐어. 하하하하.
---------------------------------------------------------
와, 헬로 2019 하나도 안 우호적인 것 같아...B문제는 귀찮아서 발을 동동 구르며 계속 비뚤어지게 생각하는데...파랗지 않을까요?
이번에 큰 사이즈로 돌아와서 앞으로도 계속 큰 사이즈를 쳐서 작은 사이즈를 타지 않고 놀았다.
전송문:http://codeforces.com/contest/1284
A. New Year and Naming
이것은 매우 간단하다. 어떤 나라의 갑을병정과 유사하다...자축인묘.연도에 맞게.
나머지 출력을 찾으면 끝난다.아무도 안 할 거라고 믿어요.
 
#include
#define ll long long
#define INF 0x3f3f3f3f3f3f3f3fLL
#define inf 0x3f3f3f3f
#define maxn 100010
using namespace std;
int a[maxn],n,m,x,y,z,T,c,v;
char ch[25][maxn],chh[25][maxn];
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%s",ch[i]);
    }
    for(int i=1;i<=m;i++)
    {
        scanf("%s",chh[i]);
    }
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&x);
        c=x%n;
        v=x%m;
        if(c==0) c=n;
        if(v==0) v=m;
        printf("%s%s
",ch[c],chh[v]); } //if() printf("YES
"); //else printf("NO
"); }

B. New Year and Ascent Sequence
제목: ascent 정의: 서열 a, 정렬 쌍이 존재합니다. 즉 1
n개의 서열을 정하고 n개의 서열을 두 개 조합한 n^2개의 조합 서열 중 몇 개의 ascent 서열이 있는지 구합니다.
사고방식: 처음에 폭력이 일어나면 폭력을 생각하면 기적이 일어난다!그리고 T+1...그리고 모퉁이를 돌아서 C를 했어요. C는 간단해요.다시 돌아와서 B를 했는데 한 시간 + 했어요.하긴 취했어!!
그리고 천천히 생각해서 자신을 성공적으로 돌려넣었다.마지막으로, 다행히 만들어 냈으니 망정이지, 그렇지 않았다면 완전히 식었을 것이다!!!
역방향 사고, ascent 서열 수량=n^2 - 비ascent 서열 수량.
ascent 서열이 비교적 규칙적인 것이 아니라 두 서열이 단조롭고 증가하지 않으며 연결되어도 단조롭고 증가하지 않는다.그래서 이러한 단조로운 서열을 찾아낼 수 있다.pos는 최대 최소값,vis[i]=pos 내의 서열 중 최소값<=i의 개수를 저장한다.
마지막으로 모든pos의 서열을 고려하면 그와 비ascent 서열의 서열로 연결할 수 있습니다.
코드:
#include
#define ll long long
#define INF 0x3f3f3f3f3f3f3f3fLL
#define inf 0x3f3f3f3f
#define maxn 100010
using namespace std;
ll ans;
struct AA
{
    ll l,r;
    bool operator 1)
            {
                if(a[j]>a[j-1]) ok=1;
            }
        }
        if(!ok)
        {
            pos[++num].l=minn;
            pos[num].r=maxx;

        }
    }
    sort(pos+1,pos+1+num);
    int tt=1;
    for(int i=0;i<=1000000;i++)
    {
        if(i) vis[i]=vis[i-1];
        while(tt<=num&&i==pos[tt].l)
        {
            vis[i]++;
            tt++;
        }
    }
    for(int i=1;i<=num;i++)
    {
        ans+=(num-vis[pos[i].r-1]);
    }
    printf("%lld
",n*n-ans); }

C. New Year and Permutation
제목:framed segment 정의:구간[l,r],max값-min값=r-l;1 - n으로 구성된 n을 구합니다!모든 framed segment의 개수%m
사고방식:max-min=r-l 때문에 구간[l,r]내의 r-l+1개수는 마인~max 이 max-min+1개수의 임의적인 조합이고
사실은 조합수의 문제인데 공식을 열거하면 된다. 그리고 조합수를 사용하지 않고 바로 구할 수 있는 것은 모두 C(x,1)모드의 조합수라는 것을 발견했다.승급만 요청하시면 됩니다~
framed segment의 구간 길이 l 값을 1~n에서 가져옵니다.길이가 n인 구간 중 C(n-l+1, 1)개의 연속 길이가 l인 구간을 선택할 수 있다.구간은 C(n-l+1,1)종의 연속적인 서열을 선택할 수 있다.저장, 그리고 구간 [l,r]에 l!,외부 전체 배열(n-l)!,모조리×길이가 l인 framed segment의 개수입니다.
이 순서대로 n=3의 상황을 풀면 이해하기 쉽다.
코드:
#include 
using namespace std;
typedef long long ll;
const ll MAXN=262144+5;
ll a[MAXN],mod,n;
ll fact[MAXN],ifact[MAXN];//fact[i] i   ,ifact[i]        ,        
ll pow_mod(ll n,ll k,ll mod) //    n^k m   
{
    ll res=1;
    n=n%mod;
    while(k>0)
    {
        if(k&1)
            res=res*n%mod;
        n=n*n%mod;
        k>>=1;
    }
    return res;
}
void init()//   
{
    fact[0]=ifact[0]=1;
	for(int i=1;i<=n;++i)
    {
        fact[i]=(fact[i-1]*i)%mod;
		ifact[i]=pow_mod(fact[i],mod-2,mod);
	}
}
ll C(ll n,ll m)//    
{
    if(n

D문제 폭력은 기적이 없다!!!T, 안녕히 계세요!!

좋은 웹페이지 즐겨찾기