NPSC補完計劃

登入註冊帳號.

請輸入帳號, 密碼以及預計登入時間
進階搜尋  

最新消息:

歡迎光臨NPSC補完計劃

+ NPSC補完計劃
 最新文章
頁: [1] 2 3 ... 10
 1 
 於: 八月 09, 2019, 02:29:49 pm 
作者 alanalan - 最新文章 由 alanalan
代碼: [選擇]
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
using namespace std;
 
int main()
{
     int i,j,a[13]={0},to=0,mi=0;
     char s[13][10]={"1m","9m","1p","9p","1s","9s","1z","2z","3z","4z","5z","6z","7z"},ci[10];
     for(i=0;i<13;i++)
     {
         cin>>ci;
         for(j=0;j<13;j++)
             if(strcmp(ci,s[j])==0)
                a[j]++;
 
     }
     for(i=0;i<=12;i++)
     {
            to+=a[i];
            if(a[i]>=1)mi++;
     }
     if(to<13||mi<=11)cout<<0<<endl;
     else if(mi==13)cout<<13<<endl;
     else cout<<1<<endl;
    return 0;
}

 2 
 於: 八月 09, 2019, 02:28:52 pm 
作者 alanalan - 最新文章 由 alanalan
代碼: [選擇]
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
 
int main()
{
     int i,n;
     char s[500];
    cin>>n;
    for(i=0;i<n;i++)
    {
       scanf("%s\n",s);
       printf("%s\n",s);
    }
 
    return 0;
}

 3 
 於: 八月 09, 2019, 02:27:52 pm 
作者 alanalan - 最新文章 由 alanalan

代碼: [選擇]
#include <iostream>
#include <algorithm>
using namespace std;
   
int main()
{
    unsigned long long int i,s[9];
    for(i=0;i<9;i++)
        cin>>s[i];
    cout<<s[0]+s[1]-s[3]-s[8]<<endl;
    return 0;
}

 4 
 於: 八月 09, 2019, 02:21:29 pm 
作者 alanalan - 最新文章 由 alanalan
C++:
代碼: [選擇]
#include <iostream>
#include <algorithm>
using namespace std;
 
int main()
{
    int n,ans=0,a;
    cin>>n;
    while(n--)
    {
        cin>>a;
        if(a<=25)ans++;
    }
    cout<<min(ans,5)<<endl;
    return 0;
}
 

 5 
 於: 一月 26, 2019, 10:05:07 pm 
作者 Felicity - 最新文章 由 alanalan
爆開+1




#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
 
int main()
{
   int n,m,ans=0,i,j,k,l,p;
   cin>>n>>m;
    if(n==1)
    {
        cout<<1<<endl;
    }
    else if(n==2)
    {
        for(i=1;i<=6;i++)
        {
            for(j=1;j<=6;j++)
            {
                if(i+j==m)ans++;
            }
        }
        cout<<ans<<endl;
    }
    else if(n==3)
    {
        for(i=1;i<=6;i++)
        {
            for(j=1;j<=6;j++)
            {
                for(k=1;k<=6;k++)
                {
                    if(i+j+k==m)ans++;
                }
 
            }
        }
        cout<<ans<<endl;
    }
    else if(n==4)
    {
        for(i=1;i<=6;i++)
        {
            for(j=1;j<=6;j++)
            {
                for(k=1;k<=6;k++)
                {
                    for(l=1;l<=6;l++)
                    {
                        if(i+j+k+l==m)ans++;
                    }
                }
 
            }
        }
        cout<<ans<<endl;
    }
    else if(n==5)
    {
        for(i=1;i<=6;i++)
        {
            for(j=1;j<=6;j++)
            {
                for(k=1;k<=6;k++)
                {
                    for(l=1;l<=6;l++)
                    {
                        for(p=1;p<=6;p++)
                        {
                            if(i+j+k+l+p==m)ans++;
                        }
 
                    }
                }
 
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

 6 
 於: 一月 26, 2019, 09:56:11 pm 
作者 Felicity - 最新文章 由 alanalan
我的寫法一開始也是這樣寫,但測資一大就會超時,建議使用內建sort函數來排序,速度快很多。

 7 
 於: 十月 17, 2018, 02:39:55 pm 
作者 sagit - 最新文章 由 sagit
這題要以二進位來思考,
假設 A=100100010,
則滿足 A+B=A|B 條件的 B,
在 A 中為 1 的位元必定為 0,
也就是 B=0xx0xxx0x,
其中的 x 可為 0 或 1,
因此只要數一下 A 裡面有幾個位元是 0,
算出 2 的次方就可以得到答案。

但是題目又規定 B <=X ,
所以我們要將 X 分段處理,
假設 X=1001000100,
先找出最左邊第一個出現的 1 為 1000000000,
分出第一段數字 xxxxxxxxx,(不含上面的數)
也就是 0 ~ 111111111 (1000000000-1),
再用這一段去找有幾個位元在 A 中是 0。
接下來再找出第二個出現的 1 為 1000000,
而第二段數字為 1000xxxxxx,
也就是 1000000000 ~ 1000111111 (1001000000-1),
數字的最前面固定是 1000,
一樣找出後面的位元有幾個在 A 中是 0。
要注意的是,如果這個位元在 X 和在 A 中同時為 1,
則後面就不會再有答案,必須中斷。

再來,因為這個做法只能處理到 X-1,
所以 X 要另外處理。
最後,因為題目要求要正整數,
但這個做法會包含 0,
所以答案要再減一。

核心程式碼:
代碼: [選擇]
for (bit=(1<<30), ans=0; bit; bit>>=1)
{
    if ((bit&x)==0) continue;
    for (bit2=(bit>>1), c=0; bit2; bit2>>=1)
        if ((bit2&a)==0) c++;
    ans+=A[c];
    if (bit&a) break;
}
if ((a|x)==(a+x)) ans++;
printf("%d\n", ans-1);
PS. A[ i ] 為 2i, 可在程式一開始先算出它們的值。

 8 
 於: 十月 15, 2018, 02:56:08 pm 
作者 sagit - 最新文章 由 sagit
這題答案的長方形,如果不是 1x2,就一定是 1x3 的大小,
以這個方式每個都找一找就可以找到答案。

 9 
 於: 十月 15, 2018, 02:49:58 pm 
作者 sagit - 最新文章 由 sagit
將下限L設為 1,上限U設為 4e18 (即 4*1018),
< 和 <= 時修正U (k比U小的時候才修正),
而 > 和 >= 時修正L (k比L大的時候才修正),
U-L+1即是答案,
要注意如果答案是負的則輸出0,
而答案大於 1e18 則是 INF。

 10 
 於: 十月 15, 2018, 02:43:36 pm 
作者 sagit - 最新文章 由 sagit
假設字串長度為L,
以兩層的for迴圈,
第一層 i=1~L/2,第二層 j=i+1~L*2/3,
則可以分解成三個子字串:0~i-1、i~j-1、j~L-1,
任一子字串的長度為2以上,且第一個字元為0時不合法,
接下來再將三個子字串各自轉成long long int,
再判斷a+b==c是否成立即可。

頁: [1] 2 3 ... 10