水題
#include#include #include using namespace std;int main(){ int a1,a2,a3,b1,b2,b3,s,t1,t2,sum1,sum2; while(scanf("%d%d%d",&a1,&a2,&a3)!=EOF) { scanf("%d%d%d",&b1,&b2,&b3); scanf("%d",&s); sum1 = a1+a2+a3; sum2 = b1+b2+b3; if(sum1>=5) { t1 = sum1/5; if(sum1%5) t1++; } else if(sum1>0) t1 = 1; else t1 = 0; if(sum2>=10) { t2 = sum2/10; if(sum2%10) t2++; } else if(sum2>0) t2 = 1; else t2 = 0; if(t1+t2>s) puts("NO"); else puts("YES"); } return 0;}
題意:給你兩個字符串,要把a串變為b串,如果只需要刪除某些字符就能達到目的就輸出automaton
如果只通過交換某些字符就輸出array,如果兩種操作都需要才能達到目的就輸出both,如果兩種操作
同時使用都不行則輸出need tree.
算法:
這個其實情況很復雜的,必須保持頭腦清晰清晰清晰~
1、首先如果兩個串是相同的則輸出array。
2、如果a串長度小于b串長度或者b串中的對應字母在a串中個數不夠或者種類不夠都是need tree.
3、如果a串長度等于b串長度,且a串中能找到對應的b串中的字母則輸出array.
4、如果a串長度大于b串長度,b串中的字母在a串中依次出現則輸出automaton.如果雖然都出現了但是
順序不一樣,則輸出both。
#include#include #include #include using namespace std;char s1[110],s2[110];vector c;int cnt1[30],cnt2[30];int main(){ int flag1,flag2,d,flag; while(scanf("%s%s",s1,s2)!=EOF) { if(strcmp(s1,s2)==0) { printf("array\n"); continue; } flag1 = flag2 = flag = 0; c.clear(); memset(cnt1,0,sizeof(cnt1)); memset(cnt2,0,sizeof(cnt2)); int len1 = strlen(s1); int len2 = strlen(s2); if(len1>len2) flag1 = 1; for(int i=0;i cnt1[s2[i]-'a']) { flag = 1; break; } } if(flag || len1
C. Painting Fence
題意:有n個長度為ai的木條。然后有一個油漆刷,木條寬度和油漆刷的寬度都為1,要把
木條都涂色。且油漆刷刷到的地方都要有木塊。問最少需要刷多少次。
算法:記憶化搜索
1、橫向刷的下面一定是橫向刷。
2、刷完了下面共同的長度后會把木條分成斷開的幾截,每一截由若干木條的上半部分未刷油漆的組成。
每一部分要么就是豎著刷要么就是橫著刷,這時比較兩種刷法的次數,取小者。[l,r]的部分豎著刷要刷
r-l+1下,橫著刷還是先刷公共部分,再看上面分成幾截,于是又出現了相同的子問題。用dfs遞歸解決。
#include#include #include #define maxn 5010using namespace std;typedef long long ll;ll a[maxn];ll min(ll x,ll y){ return x
D. Multiplication Table
題意:n行m列的乘法表,為第k大的數是哪個。
比如:2*3的乘法表為 1 2 3
2 4 6
算法:二分查找。
由于最大的數為n*m=25*10^10,想到二分。第k大的數就是說有k個小于等于他的數(這種說法也不準確),
反正就是第一個找到的這樣的最小的數。
充分利用乘法表的特點,每一行都是行數乘以1-m。所以找比小于等于x的數就是min(m,x/i)。
P.S 。。反正我是沒想到這個解法啦。。o(?□?)o。。學習了。。
#include#include #include #include using namespace std;typedef long long ll;ll k,n,m;ll min(ll x,ll y){ return x >1; if(check(mid)>=k) { ans = mid; r = mid-1; } else l = mid+1; } printf("%I64d\n",ans); } return 0;}
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com