NPSC補完計劃

登入註冊帳號.

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

最新消息:

歡迎光臨NPSC補完計劃

+ NPSC補完計劃 » skipper 的個人資料 » 顯示文章
 文章

顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。

文章 - skipper

頁: [1] 2
1
NPSC2014國中組決賽 / D 寧寧發糖果
« 於: 十二月 06, 2014, 03:08:40 pm »
/*
先用快篩法建立質數表再做!
http://www.csie.ntnu.edu.tw/~u91029/Prime.html
*/
代碼: [選擇]
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int S[77777];
const int MAX = 1000001;
bool prime[MAX];

void eratosthenes()
{
    for (int i=0; i<MAX; i++)  // 初始化
        prime[i] = true;
 
    prime[0] = false;   // 0 和 1 不是質數
    prime[1] = false;
 
    // 找下一個未被刪掉的數字
for (int i=2; i<MAX; i++){
if (prime[i]){
            // 刪掉質數i的倍數,從兩倍開始。保留原本質數。
            for (int j=i+i; j<MAX; j+=i)
                prime[j] = false;
}
}
}
int main(){
eratosthenes();
int T,n;
cin >>T;
while(T--){
cin >> n;
for (int i=0;i<n;i++){
cin >> S[i];
}
int largest = *max_element(S,S+n);
bool FOUND=false;
for (int j=2;j<=largest&&!FOUND;j++){
if(prime[j]){
int count=0;
for (int i=0;i<n&&!FOUND;i++){
if (S[i]%j==0) count++;
if (count==2) FOUND =true;
}
}
}
if (FOUND) cout <<"Yes"<<endl;
else cout << "No"<<endl;
}
return 0;
}

2
NPSC2014國中組決賽 / A 生日快樂喵
« 於: 十二月 06, 2014, 03:05:51 pm »
/*
1. 用窮舉法先列出 n 從 0~30 的解,看出規律,再求解
2. 小心死在多一個0 (n=9,18,...)
*/
代碼: [選擇]
#include <iostream>
#include <string>
using namespace std;
int main(){
int T,n;
cin >>T;
while(T--){
cin >> n;
if (n==0) {
cout << '0' <<endl;
}
else{
int n9 = n/9;
int leading = n%9;
if (leading!=0){
cout << leading;
}

// method1
string s= string(n9,'9');
cout << s;

// method2
//while(n9--){
//cout << "9" ;
//}
cout << endl;
}
}
return 0;
}

3
NPSC2014國中組初賽 / F 小可魚寫作業
« 於: 十一月 23, 2014, 07:51:00 pm »
代碼: [選擇]
#include<iostream>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<string>
#include<sstream>
#include<vector>
using namespace std;

int main(){
int numofcase;
cin>>numofcase;
for(int z=0;z<numofcase;z++){
int sizeofstring;
cin>>sizeofstring;
    string s;
string steve;
cin>>steve;
steve=steve+"a";
int ans=0;
int finalans=0;
    int breakpoint=-1;
for(int i=0;i<steve.length();i++){
if(steve[i]>='a'&&steve[i]<='z'){
steve[i]=' ';
ans+=(i-breakpoint)*(i-breakpoint-1)/2;

for(int j=breakpoint+1;j<i;j++){
   if(steve[j]=='0'){
     ans-=(i-1-j);
   }

}
finalans+=ans;
ans=0;
breakpoint=i;
}

}
cout<<finalans<<endl;

}
}

4
NPSC2014國中組初賽 / NPSC-2014-國中組E.等差數列
« 於: 十一月 23, 2014, 07:48:27 pm »
代碼: [選擇]
#include <iostream>
#include <algorithm>
using namespace std;
int Y[200];
int main(){
int T; cin >> T;
while(T--){
int N,max=0;
cin >> N;
for (int i=0;i<N;i++) cin >> Y[i];
bool same=true;
int d = Y[1]-Y[0];
for (int i=2;i<N;i++){
int d2 = Y[i]-Y[i-1];
if (d2!=d){
same=false;
break;
}
}

if (same){
max = N;
}
else{
for (int i=0;i<N;i++){
for (int j=i+1;j<N;j++){
float A,B;
A = (float)(Y[j]-Y[i])/j-i;
B = Y[i]-A*i;
//cout << i << ' ' << j <<' ' << A << ' ' <<B <<  endl;

int M=0;
for(int k=0;k<N;k++){
//cout << k << " " << Y[k] << " " << A*(k)+B << endl;
if (Y[k]==A*(k)+B)
M++;
}
if (M>max){
max = M;
if (max==N) break;
}
}
}
}


cout << N-max  << endl;
}
return 0;
}

5
NPSC2014國中組初賽 / Re: NPSC-2014 國中組初賽 C. 新.3N+1
« 於: 十一月 23, 2014, 09:34:24 am »
有數學解
代碼: [選擇]
#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, const char * argv[])
{
    int t,b,n;
    cin >> t;
    while(t--){
        cin >> n;
   while (n % 2 == 0) n = n / 2;
    b = pow(2,ceil(log2(n)))-n;
    if(b==n||b==0)
        cout << "1 1" << endl;
    else
        cout << "1 " << b << endl;
    }
    return 0;
}


6
NPSC2013國中組初賽 / Re: ProblemB-餅乾,餅乾,更多的餅乾
« 於: 十二月 30, 2013, 05:28:06 pm »
((n+2)*(n+2))/8

7
NPSC2013國中組初賽 / Re: ProblemB-餅乾,餅乾,更多的餅乾
« 於: 十一月 26, 2013, 09:13:58 am »
 ;D漂亮!

8
NPSC2013國中組初賽 / Re: ProblemB-餅乾,餅乾,更多的餅乾
« 於: 十一月 25, 2013, 11:12:06 am »
這個公式應該可以
n+(((n/4-1)*4+n%4)+n%4)*(n/4)/2
 以你Problem D的做法(梯形公式)導出的

9
NPSC2008國中組決賽 / Re: C.喵喵抓老鼠
« 於: 十一月 03, 2013, 09:20:16 am »
代碼: [選擇]
#include <iostream>
#include <string>
#include <map>
#include <queue>
using namespace std;
int grid[100][100],N,M;
map<char,int> tr;
enum {WALL=-3,MOUSE,SPACE,CAT};
struct Position {int r; int c;};
Position k;

queue<Position> q;
Position moves[4]={{0,1},{1,0},{0,-1},{-1,0}};
bool FOUND;
int steps;
int main(){
tr['#']=WALL, tr['@']=MOUSE, tr['.']=SPACE, tr['K']=CAT;
while(cin>>N && N>0){
for (int i=0;i<N;i++){
string row; cin >> row;
M = row.length();
for (int j=0;j<M;j++){
grid[i][j]=tr[row[j]];
if (row[j]=='K') {k.r=i; k.c=j;};
}
}
FOUND = false;
while(!q.empty()) q.pop();
q.push(k);
while(!q.empty()&&(!FOUND)){
k=q.front();q.pop();
steps = grid[k.r][k.c]+1;
for (int i=0;i<4 &&(!FOUND);i++){
Position p = {k.r+moves[i].r, k.c+moves[i].c};
switch(grid[p.r][p.c]){
case MOUSE:
FOUND=true;
break;
case SPACE:
grid[p.r][p.c]=steps;
q.push(p);
}
}
}
if(FOUND)
cout << steps << endl;
else
cout << "= =\"" << endl;
}
}

10
NPSC2012國中組決賽 / Re: A、烤餅乾
« 於: 二月 02, 2013, 03:15:56 pm »
代碼: [選擇]
#include <iostream>
using namespace std;
int main(){
bool showSolution = false;
int cases, i;
long long a,b,c;
cin >> cases;
for (i=0;i<cases;i++){
int s;
int cnt=0;
cin >> s;
for (int a=1;a<=s/3;a++){
for (b=(s-a)/2,c=s-a-b; a<=b && c<s/2;b--,c++){
if (a+b>c){
if (showSolution){
cout << a << "," << b << "," << c << endl;
}
cnt++;
}
}
}
cout << cnt << endl;
}
system("pause");
return 0;
}

11
NPSC2012國中組初賽 / Re: F:小可魚兒游
« 於: 十二月 09, 2012, 09:20:19 am »
謝謝! :)

12
NPSC2012國中組初賽 / Re: A、長得跟大樹一樣
« 於: 十二月 01, 2012, 08:40:42 pm »
用sort 的作法
代碼: [選擇]
#include <iostream>
#include<algorithm>
using namespace std;   
int main(){
        int numcase,m,n,*leaf,m1,i;
        cin>>numcase;
        while(numcase>0)
        {
                numcase=numcase--;
                cin>>m>>n;
                m1=0;
                leaf=new int[m];

                while(m1<m)
                {
             cin>>leaf[m1];
             m1++;
            }
                sort(leaf,leaf+m);
                m1=0;
                for(i=0;i<m;i++)
                {
               if(n<=leaf[i])
                   {
                break;
               }
                }
            if(i==m)
                {
               cout<<"not yet"<<endl;
            }
                else
                {
               cout<<(i+1)*50<<endl;
                }
        }
        //system("pause");
}

13
NPSC2012國中組初賽 / Re: A、長得跟大樹一樣
« 於: 十二月 01, 2012, 08:39:18 pm »
不做排序的作法,比大小就好了
代碼: [選擇]
#include <iostream>
using namespace std;
int main(void){
int T,M,N;
cin >> T;
for(int i = 0;i < T;i++){
int decade=0;
cin >> M >> N;
int j;
for(j = 0;j < M;j++){
int current;
cin >> current;
if (current<=N){
decade++;
}
}
if (decade==M){
cout << "not yet" << endl;;
}
else{
cout << (decade+1)*50 << endl;
}
}
return 0;
}

14
NPSC2012國中組初賽 / Re: F:小可魚兒游
« 於: 十二月 01, 2012, 08:38:11 pm »
(錯的!)似乎把數列加起來看總和是正或負或0就可以決定了。
代碼: [選擇]
#include <iostream>
#include <string>
using namespace std;
int main(void){
int T,M,N;
cin >> T;
for(int i = 0;i < T;i++){
cin >> N;
int j,sum=0;
for(j = 0;j < N;j++){
int current;
cin >> current;
sum+=current;
}
string msg;
if (sum>0){
msg = "Go right";
}
else if (sum<0){
msg = "Go left";
}
else{
msg = "Both okay";
}
cout << msg << endl;
}
system("pause");
return 0;
}

15
NPSC2012國中組初賽 / D. B613星球的元素 (C++)
« 於: 十二月 01, 2012, 08:36:00 pm »
代碼: [選擇]
// accessing mapped values
#include <iostream>
#include <map>
#include <string>
using namespace std;

int main ()
{
map<string,int> Elements;
int M,N;
cin >> M >> N;
//建立元素表
for(int i = 0;i < M;i++){
string element;
int weight;
cin >> element >> weight;
Elements[element] = weight;
}

for(int i = 0;i < N;i++){
string composite;
int weight=0;
cin >> composite;
string e;
e=composite[0];
int number=0;
for (int j=1;j<composite.length();j++){
if (isdigit(composite[j])){
number = number*10 + (composite[j]-'0');
}
else if (islower(composite[j])){
e=e+composite[j];
}
else{
if (number==0) number=1;
weight += Elements[e] * number;
e= composite[j];
number=0;
}
}
if (number==0) number=1;
weight += Elements[e] * number;
cout << weight << endl;
}

  //system("pause");
  return 0;
}

16
NPSC2008國中組初賽 / [C++] A. 優惠方案
« 於: 十一月 17, 2012, 06:33:29 pm »
代碼: [選擇]
#include <iostream>
using namespace std;
int main(){
int cases,w,x,y,z;
cin >> cases;
for(int i = 0;i < cases;i++){
cin >> x >> y >> z;
w = (x-y)*(y-z)*(z-x);
if (w==0)
cout << "NO" << endl;
else
cout << "YES"<< endl;
}
return 0;
}

17
NPSC2008國中組初賽 / [C++] D. 沙之國
« 於: 十一月 17, 2012, 06:27:53 pm »
代碼: [選擇]
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main(void){
int cases,p,times;
cin >> cases;
for(int i = 0;i < cases;i++){
cin >> p;
times=0;
times += p/27;
p = p%27;
times += p/9;
p = p%9;
times += p/3;
times += p%3;
cout << times << endl;
}
return 0;
}

18
NPSC2008國中組初賽 / [C++] C. 電費系統
« 於: 十一月 17, 2012, 06:18:23 pm »
代碼: [選擇]
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(void){
int steps,current,next,delta,cost=0;
while(1) {
cin >> steps;
if (steps==0){
break;
}
else{
cost=0;
cin >> current;
for(int i=0;i<steps-1;i++){
cin >> next;
delta = next -current;
if (delta <0){
cost += delta*(-1)*10;
}
else{
cost += delta * 20;
}
current = next;
}
cout << cost << endl;
}
}
return 0;
}

19
NPSC2008國中組初賽 / [C++]B. 首領的名字
« 於: 十一月 17, 2012, 06:06:26 pm »
代碼: [選擇]
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
bool match(string s, string t){
bool front, end;
int w=0;
for (int i=0;i<s.length();i++){
if (s[i]=='#'){
w=i;
break;
}
}

front = true;
for (int i=0;i<w;i++){
if (s[i]==t[i]){
continue;
}
else {
front = false;
}
}
reverse (s.begin(), s.end());
reverse (t.begin(), t.end());

end = true;
for (int i=0;i<s.length()-w-1;i++){
if (s[i]==t[i]){
continue;
}
else {
end = false;
}
}
return front && end;
}
int main(void){
int cases,n;
string s,t;
cin >> cases;
for(int i = 0;i < cases;i++){
cout << "DATA SET #" << (i+1) <<":" <<endl;
cin >> s;
cin >> n;
for(int j=0;j < n;j++){
cin >> t;
if (match(s,t)){
cout << "POSSIBLE" << endl;
}
else{
cout << "IMPOSSIBLE" << endl;
}
}
}
return 0;
}

20
NPSC2009國中組初賽 / Re: [C++] A. 樹上的松鼠
« 於: 十一月 11, 2012, 04:14:32 pm »
用max_element的版本
代碼: [選擇]
#include <iostream>
#include <algorithm>
using namespace std;
int main(void){
int cases,i,n,x,y,h,Array[1000];
cin >> cases;
for(int i = 0;i < cases;i++){
cin >> n;
int max=0;
int j,l;
for(j=0,l=0;j < n;j++){

cin >> x >> y >> Array[l++];
cin >> x >> y >> Array[l++];;

}
cout << *max_element(Array, Array+l) << endl;
}

return 0;
}

頁: [1] 2