日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STL快速解题

發布時間:2024/7/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL快速解题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?http://ac.jobdu.com/problem.php?pid=1402??? 特殊的數

#include<iostream> #include<bitset> #include<cstdio> using namespace std;void read(int &data) //快速讀取數據 {char ch = getchar();while (ch < '0' || ch > '9')ch = getchar();data = 0;do{data = data*10 + ch-'0';ch = getchar(); }while (ch >= '0' && ch <= '9'); }int main(void) {int n,i,m,max,num,min;bitset<1000001> bits,b;while(scanf("%d",&n)!=EOF){bits.reset(); //清空b.reset();max=-1;min=1000001;for(i=0;i<n;i++){//scanf("%d",&m);read(m);if(m>max)max=m;if(m<min)min=m;if(bits[m]==0) //這個數字第一次出現bits[m]=1;else if(bits[m]==1 && b[m]==0) //這個數字第二次出現b[m]=1;//超過兩次以上出現的數字不用在進行賦值操作了}num=0;for(i=min;i<=max;i++){if(bits[i]==1 && !b[i]) //只出現了一次num++;}//num=bits.count()-b.count();printf("%d\n",num);if(num){m=0;for(i=min;i<=max;i++){if(b[i]==0 && bits[i]==1){if(m==0){printf("%d",i);m++;}else{printf(" %d",i);m++;}if(m==num){printf("\n");break;}}}}}return 0; }

http://ac.jobdu.com/problem.php?pid=1403??? 神奇的開關??http://poj.org/problem?id=1176

#include<iostream> #include<queue> #include<cstdio> #include<string> #include<set> using namespace std; #include<memory.h>struct node {string name; //定義一個優先隊列friend bool operator<(node a,node b){return a.name > b.name; //小到大(字典序)} }w;string str; priority_queue<node > q;set<string>myset; int ON[101],OFF[101],n,i,j,k,p,r,t; bool pos[101];inline void solve() {int h;if(i)memset(pos,false,sizeof(pos));else //開memset(pos,true,sizeof(pos));if(j) //奇數的燈改變狀態{for(h=1;h<=n;h+=2)pos[h] ^=1; //跟 pos[h] =1- pos[h]; 是等效的}if(k) //偶數的燈改變狀態{for(h=1;h<=n;h++){if((h&1)==0) //由于==的優先級比與運算的優先級別要高,所以與運算需要加括號,導致了多次WApos[h] ^=1;}}if(p) //編號為(3 * K + 1)(K>=0)的燈改變狀態{for(h=1;h<=n;h+=3){if(h%3==1)pos[h] ^=1;}}for(h=0;h<r;h++){if(!pos[ON[h]])return ;}for(h=0;h<t;h++){if(pos[OFF[h]])return ;}str="";for(h=1;h<=n;h++){if(pos[h])str+='1';elsestr+='0';}myset.insert(str); }int main(void) {int c,m;set<string>::iterator iter;while(scanf("%d",&n)!=EOF){myset.clear();scanf("%d",&c);r=t=0;while(1){scanf("%d",&m);if(m==-1)break;ON[r++]=m;}while(1){scanf("%d",&m);if(m==-1)break;OFF[t++]=m;}for(i=0;i<=1;i++) //枚舉狀態{for(j=0;j<=1;j++){for(k=0;k<=1;k++){for(p=0;p<=1;p++){if(i+j+k+p>c)break;if ((i+j+k+p)%2!=c%2)continue;solve();}}}}if(myset.empty())printf("IMPOSSIBLE\n");else{for(iter=myset.begin();iter!=myset.end();iter++)cout<<*iter<<endl;}}return 0; }


?

總結

以上是生活随笔為你收集整理的STL快速解题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。