Codeforces Round #581 (Div. 2) d1,d2
【题意】:给一个二进制的子串,然后,问包含0最多的另一个子串是什么,其中这个子串要求任何一个区间的子序列的最长不下降子串要求和原来一样长
【题解】:其实就是一个结论题啦,要保证是一样的话,那么就是要再是适当的时候下降,那么就是后面又几个0,那么前面就是要有多少个1
# include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
long long ans=0;
cin>>s;
for(int i=s.size()-1;i>=0;i--){
if(s[i]=='0') ans++;
else{
if(ans) ans--;
else s[i]='0';
}
}
cout<<s<<endl;
return 0;
}
2008-2009 ACM-ICPC, NEERC, Southern Subregional Contest B
【题意】有n个拉丁字母,m个由这n个拉丁字母组成的单词,将这些拉丁字母组合成键,要求键个数最小而且每一个单词用键去表示的序列不能是一样的。
【题解1】用dfs去搜索
枚举键的总个数,然后暴力判断每一个字母在哪个位置,但是这样写会T,要再加一个优化,就是如果当前这个键的字母的个数为0,那么说明当前这个字母在这个键上是不可以的,在其他空键上还是不可以,那么当前的安排就是不合理的所以就直接return就可以了。
# include <bits/stdc++.h>
using namespace std;
const int MAXN=60;
char s[MAXN][2];
int part[30];//每一个字母的位置
int sum[30];
int n,m;
bool check()
{
for(int i=0;i<m;i++){
for(int j=i+1;j<m;j++){
int a0,b0;
a0=s[i][0]-'a';
b0=s[j][0]-'a';
if(a0==b0||(part[a0]==part[b0]&&part[a0]!=-1)){
int a1,b1;
a1=s[i][1]-'a';
b1=s[j][1]-'a';
if(a1==b1||(part[a1]==part[b1]&&part[a1]!=-1)){
return false;
}
}
}
}
return true;
}
int dfs(int now,int len)
{
int flag;
flag=check();
if(flag==0) return 0;
if(now==n) return 1;
for(int i=1;i<=len;i++){
part[now]=i;
sum[i]++;
if(dfs(now+1,len)) return 1;
part[now]=-1;
sum[i]--;
if(sum[i]==0) return 0;
}
return 0;
}
int main()
{
int cnt=0;
scanf("%d%d",&n,&m);
memset(part,-1,sizeof(part));
memset(sum,0,sizeof(sum));
for(int i=0;i<m;i++){
scanf("%s",s[i]);
}
for(int i=1;i<=n;i++){
if(dfs(0,i)){cnt=i; break;}
}
printf("%d\n",cnt);
for(int i=1;i<=cnt;i++){
for(int j=0;j<n;j++){
if(part[j]==i) printf("%c",'a'+j);
}
printf("\n");
}
return 0;
}
/*
13 12
kg
bh
fk
bb
ma
ik
am
al
ah
aj
ab
ag
*/
【题解2】随机+贪心
对1-n个拉丁字母随机排序,然后贪心的去找,先把第一个字母放在1键上,然后再判断第二个字母能不能放在1键上,如果可以就放在1键上,不可以就新开一个2键,同样第三个字母也是这么判断,看能不能放在1、2键上,如果可以就放,不可以就新开一个键放。这样随机1000次,取最小的就可以了。
# include <bits/stdc++.h>
using namespace std;
char s[20];
int p[20];
char ss[70][5];
int mp[70][2];
int minp[20];
int ff[30][30];
int main()
{
for(int i=0;i<13;i++){
s[i]='a'+i;
}
int n,m;
scanf("%d%d",&n,&m);
getchar();
for(int i=0;i<m;i++){
scanf("%c%c",&ss[i][0],&ss[i][1]);
getchar();
}
int minn=1e9;
for(int i=0;i<1e3;i++){
random_shuffle(s,s+n);
int last=1;
memset(p,0,sizeof(p));
for(int j=0;j<n;j++){
if(j==0){
p[s[j]-'a']=1;
for(int l=0;l<m;l++){
for(int q=0;q<2;q++){
if(ss[l][q]==s[j]) mp[l][q]=p[s[j]-'a'];
else mp[l][q]=ss[l][q]-'a'+14;
}
}
}else{
int flagg=1;
for(int k=1;k<=last;k++){
int flag=1;
p[s[j]-'a']=k;
memset(ff,0,sizeof(ff));
for(int l=0;l<m;l++){
for(int q=0;q<2;q++){
if(ss[l][q]==s[j]) mp[l][q]=p[s[j]-'a'];
else{ if(mp[l][q]==0) mp[l][q]=ss[l][q]-'a'+14;}
}
ff[mp[l][0]][mp[l][1]]++;
}
for(int l=1;l<=26;l++){
for(int q=1;q<=26;q++){
if(ff[l][q]>1){
flag=0;
break;
}
}
if(flag==0) break;
}
if(flag){ flagg=0;break; }
}
if(flagg){
last++,p[s[j]-'a']=last;
for(int l=0;l<m;l++){
for(int q=0;q<2;q++){
if(ss[l][q]==s[j]) mp[l][q]=p[s[j]-'a'];
else{ if(mp[l][q]==0) mp[l][q]=ss[l][q]-'a'+14;}
}
}
}
}
}
if(minn>last){
minn=last;
for(int j=0;j<n;j++) minp[j]=p[j];
}
}
printf("%d\n",minn);
for(int i=1;i<=minn;i++){
for(int j=0;j<n;j++){
if(minp[j]==i) printf("%c",'a'+j);
}
printf("\n");
}
return 0;
}
/*
13 12
kg
bh
fk
bb
ma
ik
am
al
ah
aj
ab
ag
13 12
cg
lf
hc
ll
am
ec
ma
mb
mf
md
ml
mg
*/
Codeforces Round #582 (Div. 3) D1,D2
【题意】每一个数可以被除2,每次除2算一次操作,问使得当前的序列中最多的数的个数大于k的最少的操作次数
【题解】我们可以预处理出变成 i 需要 j 步的数的个数有多少,然后枚举最后到的数是什么,取最小的就可以了。
# include <bits/stdc++.h>
using namespace std;
const int MAXN=2e5+100;
int a[100];
int m[MAXN];
int mp[MAXN];
int dp[MAXN][20];
int main()
{
int n,k;
int maxx=0,minn=1e9;
memset(dp,0,sizeof(dp));
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
m[a[i]]++;
mp[a[i]]=1;
maxx=max(maxx,m[a[i]]);
dp[a[i]][0]=m[a[i]];
}
if(maxx>=k) minn=0;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
int c=0;
int aa=a[i];
while(aa){
c++;
aa=aa/2;
mp[aa]=1;
dp[aa][c]++;
}
}
for(int i=0;i<=2e5;i++){
if(mp[i]){
int c=0,cnt=0;
for(int j=0;j<20;j++){
c+=dp[i][j];
cnt+=j*dp[i][j];
if(c>=k){
cnt-=j*(c-k);
minn=min(minn,cnt);
break;
}
}
}
}
printf("%d",minn);
return 0;
}
2019上海网络赛 B
【题意】开关原来是关着的,一共有n个开关,m个操作,每次操作给一个区间,代表把这个区间中的所有的开关都扳动开关一次,问最后有多少灯是亮着的
【题解】用一个pair存一下区间和标记,算一下前缀和得到每一段的状态
# include <bits/stdc++.h>
using namespace std;
const int MAXN=2e3+100;
pair<int,int> p[MAXN];
int main()
{
int T;
int cass=0;
scanf("%d",&T);
while(T--){
int n,m;
scanf("%d%d",&n,&m);
cass++;
int tot=0;
for(int i=1;i<=m;i++){
int l,r;
scanf("%d%d",&l,&r);
p[++tot]=make_pair(l,1);
p[++tot]=make_pair(r+1,-1);
}
sort(p+1,p+tot+1);
int now=0;
int ans=0;
int sum=0;
for(int i=1;i<=tot;i++){
if(now!=p[i].first){
if(sum&1) ans+=p[i].first-now;
now=p[i].first;
}
sum+=p[i].second;
}
if(sum&1) ans+=n-now;
printf("Case #%d: %d\n",cass,ans);
}
return 0;
}
2019上海网络赛 D
【题意】给定一个N。求限定长度的序列中,哪些求和等于连乘
【题解】dfs深搜打表
# include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int b[4000];
LL ans=0;
LL mod=1e9+7;
LL cal(int n)
{
LL cnt=1;
for(int i=2;i<=n;i++){
cnt=cnt*i%mod;
}
return cnt;
}
LL mul(LL a,LL b,LL mod)
{
LL res=0;
while(b){
if(b&1) res=(res+a)%mod;
a=(a+a)%mod;
b>>=1;
}
return res;
}
LL quick_pow(LL a,LL b,LL mod)
{
LL ret=1;
while(b){
if(b&1) ret=mul(ret,a,mod);
a=mul(a,a,mod);
b>>=1;
}
return ret;
}
void dfs(int n,int now,int minn,int a,LL sum,LL pi)
{
if(a>12||a>n||now>n) return ;
for(int i=minn;i<=3000;i++){
now++;
sum+=i;
pi*=i;
if(b[i]==0) a++;
b[i]++;
if((sum+n-now)==pi){
//cout<<"@@@"<<sum<<" "<<pi<<" "<<now<<endl;
LL fz=cal(n);
LL fm=1;
for(int j=1;j<=3000;j++){
if(j==1){
LL cnt=cal(n-now);
// cout<<1<<" "<<cnt<<endl;
fm=quick_pow(cnt,mod-2,mod);
// cout<<"fm"<<fm<<endl;
fz=fz*fm%mod;
// cout<<"fz"<<"@@@"<<fz<<endl;
}
if(b[j]){
// cout<<i<<" "<<j<<" "<<b[j]<<endl;
LL cnt=cal(b[j]);
// cout<<j<<" "<<cnt<<endl;
fm=quick_pow(cnt,mod-2,mod);
// cout<<"fm"<<fm<<endl;
fz=fz*fm%mod;
}
}
// cout<<"fz"<<fz<<endl;
ans=(ans+fz)%mod;
}
if(pi>(sum+n-now)){
sum-=i;
pi/=i;
b[i]--;
now--;
if(b[i]==0) a--;
return ;
}
dfs(n,now,max(i,minn),a,sum,pi);
sum-=i;
pi/=i;
b[i]--;
now--;
if(b[i]==0) a--;
}
return ;
}
int main()
{
freopen("stateout","w",stdout);
for(int i=2;i<=3000;i++){
dfs(i,0,2,0,0,1);
printf("%lld,",ans);
ans=0;
memset(b,0,sizeof(b));
}
return 0;
}
// 1 6 12 40 30 84 224 144 135
AC代码
# include <bits/stdc++.h>
using namespace std;
int p[3100]={0,0,1,6,12,40,30,84,224,144,135,715,627,1326,1274,420,480,2720,5202,16530,3800,2590,924,16951,552,9300,68575,82134,21168,24360,165300,3720,45632,199584,2244,22015,2520,29304,77330,57798,398320,1285760,4255062,81270,41624,48510,97290,1479889,106032,11760,180075,132600,3254004,429936,1267866,38115,2293060,20948298,40667106,299425,208860,2325320,344162,7394058,7636608,82875520,8580,305118,4013836,171258,173880,11850965,70320672,1866318,14396330,4872900,17100,895356,468468,499122,252800,20509200,7012845,1391827,578676,25229190,26418340,211474989,784847184,497121123,15339150,49140,393484,1972158,821748,2924575,53598240,55872,45638306,15086610,753390000,50040450,417498852,18788230,1649648,1168440,1202040,63736369,2461428,68719050,162308630,564673856,24864,5916680,12882,83753235,89751520,869785371,124424274,827222264,916501173,142157979,2679303,3661464,39416252,40718500,31500,4096512,135201152,132178560,5399940,191928100,764103895,303683688,755446880,403450390,878166801,7620488,63013698,181404174,188003060,1490370,40044,7198477,2965248,73807320,222581380,897305600,3241644,486312756,838638473,668099857,87240552,277345965,3652110,279481895,569777520,909958004,17438618,102598248,6080160,331917600,704201656,12886128,6522608,11108130,856576600,6916639,773139192,393768648,453484704,5029110,10088316,597113652,30102,2755725,479740800,6824611,490800468,6727676,453731610,810770040,174453052,127995139,76742980,579462920,6400260,197469008,621276832,63131059,3519180,655161515,315686842,28570176,246855106,708291090,7567560,468395047,15329358,7998606,803840600,57548093,624161197,809432154,689858065,197982428,630455180,357065367,320910720,936082576,87780,963476640,74767476,379431305,9754548,380663735,10031040,156955682,25639852,20815512,5347980,198166963,886901487,225570529,242056473,501024386,533868153,603037815,920524624,245275990,718210895,212520,12540528,543375195,461026027,32361615,540843679,392427831,168324999,208713599,700359503,28225920,380401421,67909312,81646278,630637420,1293931,889031838,949548624,259817649,549967486,898626104,686911972,56583450,24419560,817851652,16842240,891525490,17040642,862442760,43568980,561311662,17984466,437032941,809577120,18959160,388056851,262408964,560202110,38713404,657023276,821728799,818922105,190585256,635328541,948130242,157183696,704797050,309867908,277830386,51523419,134870012,749747645,184738215,448245518,318027562,275886879,333883532,395070958,48524256,475894014,49114980,236370917,784569639,979573108,921821882,773970379,110038107,105145128,235499832,26910000,64267522,208632348,110356236,214584532,461333294,560051640,903997718,590609103,218012655,780213045,692419287,439786580,279209594,383153779,93074310,814843017,988535918,205584668,145543973,54218796,420841210,489026136,101531951,476789328,74482200,664404815,556029323,35179968,106293320,217140,72747180,127035152,215692694,111253064,388964221,61191507,848268878,659514248,487518216,265388569,771127213,748161940,681164077,541338475,70311036,85182422,882943718,804827001,59357303,21376250,43611750,43737408,807625711,44111586,713948361,860057995,984432333,137008032,883198273,305220824,581376307,283279826,758860975,670467540,619538990,874650824,656833322,504482780,851303417,791600048,321615528,207289111,969710687,224897578,969569932,975009846,12704182,147213128,181988425,550724752,138047730,536076394,19423120,474768550,534347422,277774654,873715625,305094536,448946783,855709629,60538530,209522824,693786590,927479183,18760111,123571800,467930686,548061617,339961478,377197825,929122116,510292238,260505648,898560496,606820688,73823363,167968493,753754165,643514715,617757502,468134774,139190904,429596203,499872283,804316856,158784988,500436898,330820304,833779290,309908865,798032191,19144628,330236216,227597688,791835097,548987726,78035958,933622580,464458901,606535622,336637759,837971159,466100351,501035131,722499131,998404247,40098260,401772714,106748090,42495200,86735880,877149,383556205,196692,263769300,896584125,250541410,706926755,322185268,663522473,595974710,915622764,342038221,55675413,585447394,719165182,809889789,569918083,97217522,72682038,663560186,103370673,909754905,634643969,791101815,701424289,688651692,481800017,873272360,331481464,944159323,607048176,450140201,307580852,633067279,507471325,680972531,932698257,847108034,329935200,841861733,931230222,86653572,298186557,317306433,382511484,941206421,998651093,269587042,223414638,901347339,381257681,299192826,716507553,865165128,88498570,843173027,268662409,919135809,671588778,222222296,816798687,794783532,382042584,329002916,363573101,606409032,111669003,820596994,868832953,599417016,293953140,806616576,764889370,63761101,853583648,276375792,65522872,998575523,883199315,676000997,149580165,348663191,678678481,255020512,485229036,109282577,448477583,149990544,76877264,304513527,150568236,655124776,151988148,534097455,270093859,221569978,619992276,544538574,150812922,389192157,202124556,637466796,904314865,928886810,154958903,986123802,493231088,174281319,670239135,620110933,863183249,934326167,819168264,7982499,709372942,504356707,254984246,388526852,40220645,796202131,485121798,860777029,845478466,228206320,616806504,373998577,548461368,270464656,47395831,356441469,376758112,144582797,511930601,460865219,191102400,759228371,706166393,656083619,483915676,233711788,334721218,366744996,256254932,939464893,820630126,744833546,727795522,280642674,886252016,350529523,205557637,252080132,562214776,526787415,474826371,467447759,426265164,903873639,814861053,652325400,373440437,687691947,369572971,323140786,69302116,43642259,660284932,778084009,340284840,31054896,788787168,688336753,145029237,985504152,789054774,962884714,395571569,233780504,168115571,494552394,67447035,202266088,798703541,395891121,135046153,403981400,159247666,143493859,798227695,55224865,357009419,454515132,150274489,178570260,210983813,498819674,361042201,426347031,720670392,170511627,29604571,941026002,196725873,117997015,558944842,993648602,775173055,482897329,216451053,588351508,69968544,839465698,267745819,497919246,707866547,515002033,457109086,791806544,756143730,501423063,621969865,65435703,1760928,294520520,295850520,171480964,75037306,746533086,735283669,993956457,761593809,576182646,29796753,307091250,750194451,127938676,113624041,684683623,559264596,910352698,632570004,922079143,700674648,107768085,12803389,315230643,69719392,684737497,713196061,500895558,489199334,118998513,154225376,601094140,605921272,635704768,226235052,487165332,520733089,660828412,510296466,70596855,87989882,814956472,989764782,509684340,105100373,56635131,878945228,75750103,889601833,805395626,1018164,550074525,591104443,507686325,106832893,121280127,252901789,754281360,55124492,539232854,378979248,37596279,871423269,46434673,303502248,831327476,682341354,984281639,518822386,209012379,373818194,280886837,200784330,835954781,952391185,708363654,854813534,31991942,892048110,573477097,726697464,481008185,838200926,184369893,235370739,451975003,442549874,346154363,664956781,751500417,766800077,612475552,603329623,900187875,480110290,124363866,359437181,75806737,428987741,280183261,255034614,138883350,744685088,284786294,118056680,857162814,86710025,111734528,902382760,671383828,390551308,330049507,268637353,432803347,734228779,52835114,1215240,794111495,169789549,974873498,2455488,7533512,434190168,275570612,631324980,694449373,796264418,520361981,566911084,141925319,310049960,259421112,389584998,465612970,741650255,15626799,817985602,955298916,373067244,749792253,519072048,709957667,352435327,307806691,103532642,931274568,55054546,508958223,334183064,784907041,514706626,765771029,654170840,327024525,265119102,997643052,198350910,662827123,380189614,818560301,792090648,648806412,565603500,370645480,697510117,191781902,714187644,68919578,775673314,802156026,327313830,981974078,353487139,356667790,612781218,123314900,720381882,234631072,725805855,662954402,249842351,851066342,815392996,425744774,876287207,974652300,945822500,514375749,436698245,389982090,638765679,953468095,254442313,374933677,546717955,718111373,785286672,40983236,854513483,869334736,706111287,760755468,477779463,106101468,555653287,467970542,448928923,244409126,132202982,45032659,183576156,723789448,331709380,646468723,7618074,634316500,507395929,739563824,358168213,307141879,906239919,383552291,603072554,927872338,992793541,106993994,959368012,239359520,958645519,97766556,731202273,524097717,897101113,696767626,119789136,506989682,454761793,260903034,924524905,436819382,460758311,350337118,742856580,632420149,647647472,119844310,736127169,625054057,951065689,523298143,55071410,495972022,948411706,661284847,543872197,327608264,717372706,816254369,365398585,849672317,892787726,91534997,561260042,200048155,615104795,893042933,398432214,686351665,720195287,512767529,354028115,730207706,758504201,989913501,338764389,727411977,595038002,181853274,396483757,432243270,485643332,877319158,140454505,745000975,611498115,395296858,292419313,191311267,853411926,446691238,580623351,397273986,740302027,954140674,368525042,496213255,99729633,819445721,223561524,791028285,725818523,391350585,1864380,471961435,460468174,110523007,188242539,601916944,869058584,154915878,373400807,566756325,525860165,283085347,96330146,735389956,947087381,931924086,914515318,998942683,972426722,825933663,917666394,34729893,639560602,6392083,997565381,357134307,688692967,810741123,779912339,146525680,451628321,76797290,548922635,837490667,170994838,423345877,129090457,818477932,59887299,921448552,696661704,376243808,23624929,593822289,7631378,669643487,457636516,966360400,169535581,221258907,804640886,946579310,759818681,502069767,488732898,189768562,874303301,139105262,74788345,342563828,814987229,518441160,486616097,264157861,781755606,220233735,293262794,47192702,744589011,502087245,644009612,698703472,933094451,437047482,973869717,353009606,311989248,891410657,574727666,112067918,586375307,881918259,178185268,777795697,383723936,833629481,705150479,74265245,146538580,8917416,364089236,603597984,669065439,56801053,340987474,491430879,167637977,795083390,514321126,628034835,73435079,331767,587868050,925257726,296025157,4583880,94548187,27129928,687485123,153476345,971505419,240975411,655010663,784968058,730969296,549515837,190402315,812520333,837233823,580225672,214692760,968382817,349551304,872030955,913289980,727860843,904421703,525699547,718377743,86469381,290404560,349078279,893847202,18047457,532613704,687247627,2426604,48290411,565094863,952919356,929554956,331258640,442063720,109848068,546344621,689175476,639256606,61256976,666659774,900152643,609635265,59764974,747453865,82276239,608996864,188466878,754517941,873055451,767056914,376133080,452677803,236489791,894446733,124367604,798555100,929966018,218211120,159167283,832017848,764662630,12452848,291468549,310525484,224341245,461404668,171786431,424308103,659875206,914488331,233375053,88095382,705038270,127859679,727692572,845393508,275751707,924561422,821163746,823207036,198946905,361117238,855245947,882535045,661613930,922227576,132563739,700201660,134187592,378134320,206304426,647483758,446869221,537761316,836501507,737942573,101462914,254976945,984195498,820249000,513006904,883675686,557168210,450052408,525873517,546387405,452391975,919501853,832568757,15771841,484526551,175134775,16034822,211327375,330263119,617274503,691022710,7120151,858681594,335637869,433252481,458555250,651254990,663858506,194778510,921937639,458334254,851969973,369221056,832965539,224982723,278741460,208135475,527091615,13727746,933648460,979217271,977908109,699347534,605275061,680006844,138207385,476420524,454337834,432857762,329129493,249917198,635207838,925775672,319266038,887064863,955698465,800487244,890273204,197837460,772046625,448568903,994270983,2202083,337825364,314855310,571777590,100930605,804271258,896561440,209505045,636202604,654077994,354744867,654916048,892346636,900874886,875082407,820397405,744408326,319524142,857109769,825251278,139189036,740415394,734723593,549082845,449981465,682193071,264849052,548097428,256591101,904105174,216886060,546346517,925358843,354864453,722718671,321846273,425509709,550501155,887998324,242630205,341203401,567799310,945919477,234461536,992565773,532984267,706692878,477501163,907735581,385409880,24084117,152826686,535828167,505728432,576019572,637926206,63597142,486048180,175547747,204747271,448146096,457727918,488912075,108205956,810889345,741657960,989265235,90709325,667608082,363714689,842189216,938344764,621625602,73955312,150044362,114626882,431495595,507500775,572205175,382879956,114216690,806893429,210570498,455186137,425417333,386398714,596827545,263703787,703382548,761557694,277792423,862325960,812639623,493319930,395541306,568546355,292602262,842784527,988275384,5275735,9710626,591395332,275741918,827299964,84102555,794676041,449558369,968205208,118854753,217545063,638934535,577554378,445509020,359426758,531701358,413836019,645845897,478408830,210980547,484616283,736453663,134784663,230072569,594470544,199456481,687245914,944400397,367422508,502407246,327525248,2409329,637838117,460451360,620429823,385772555,444059169,663166708,905797888,150216305,925211932,967581856,856604826,633524252,818608774,779154260,351933796,241245687,539079581,380121579,358363358,656464946,744407036,445509866,623576335,552371119,243859757,767639129,916565394,780997900,345270688,45337896,365937901,918769991,737716077,872053942,745882925,304107437,742913162,152591197,504005602,745963069,339027008,648158708,356979055,251658644,350267449,218396195,528325581,853128591,61960438,934101045,545726740,164051638,318390731,344462276,628428015,941306094,416249377,403965815,124891583,493241663,719780684,704028812,738481155,477766621,480078395,205758213,788722302,940576196,530403854,644491372,147765447,730407129,526483058,839247469,953647876,230174645,738401499,252016089,839168584,318135333,691236099,522885642,57852387,665872925,610449631,335587637,38225843,873941520,860129357,411876821,650600889,78154329,249283617,234331961,768939567,213615420,941385655,948215702,330205876,110301667,511776193,237458114,833816311,732543873,332144563,824338191,344405298,255873062,268201855,388755074,530063844,725604699,437231399,767499657,412006069,727898630,959761288,368963259,753594261,941168673,895390098,324029172,223503548,123695774,708347793,234357695,276680917,874921399,808351598,185838366,689388859,374465797,188032072,909068155,8103993,921653969,110434802,23592891,863079363,530641790,745174775,398849683,982492459,30669775,460755580,676159524,466381915,171201376,490088863,626115977,339492394,260661008,808962706,783494263,757057702,650205840,671600850,395289600,268699433,200749052,760092115,854974626,617918852,146480360,367958301,665443459,651958596,591996333,529141385,103042755,635875078,229543266,975622787,990059255,526296735,124207077,779086258,127431824,478615557,194940896,549034158,838633292,630929695,992660528,179905595,797408180,286079740,54997013,531739658,160399507,533581146,669649060,567027529,834300318,782811285,834852547,268762765,673491579,752621948,181327100,987648234,994705061,935860549,48395022,549649238,26096245,67139606,533925322,615363850,889938131,470733890,13002602,532459537,409148235,584397893,586072331,858764587,427977500,110641909,831590950,906744401,917704525,342763113,428849488,998462639,578275833,51671902,834310940,843525388,170077969,421311707,774941292,372210264,957332890,938318941,756823220,249986665,281293021,190083027,500167713,567291252,587178315,300549645,806113912,516253563,55634069,401950511,317126622,369911780,652840113,995547002,333897128,746359351,76209238,839552484,118141423,241283438,751474087,203444846,32164240,638177450,547414034,894616496,106931614,637581208,52040668,331409981,670064014,759726278,373057342,728961125,398421321,600741147,664406486,873395333,828186101,682634524,599791867,210650856,704668342,771258344,593207903,637940973,832297357,711254335,228743345,561644275,741275954,152879080,765704746,886538877,264033059,769721022,452249881,765404529,263878981,529906201,424675564,123370262,862734196,275732613,108121357,168897336,745259944,275432564,804959304,921962888,725908689,337253841,190937005,954433122,319125904,951881672,279216420,978112731,790310060,418123021,341506955,879497486,439639234,309283317,811120551,5175526,502449372,515256688,579419243,229419994,995589181,866246760,26610876,516875986,37065936,507816804,365834308,441987874,965406799,366042511,245802532,264579631,651328115,533437999,978270999,902688496,948335674,938252023,548615466,866583655,192236829,469532833,608959286,829987660,98460012,350364548,353524134,273438762,751361525,104696494,724719530,635381352,873474376,24492933,870561443,890772582,64841777,188736251,708591998,434240511,586686106,995174017,919069658,422661660,989767876,779664326,568742428,555571170,331095961,743189129,679638082,173723643,795843190,843437031,191954921,164546533,709767378,530779693,951738508,37529444,830757701,851230860,336572181,464724213,806214991,103681548,482107178,779781178,568834211,828359381,794619755,119224858,144284441,221489584,217832265,409643065,666067174,17805710,847806650,884710707,79469595,650370309,416226143,460498390,964744198,772525458,823037564,978423245,642109060,291791327,887427390,691797252,460317501,245566383,305470990,87733481,353487672,824102564,991301856,711556084,531020430,720557952,844714453,491631445,63851524,434703155,2435425,790404246,904657164,438661023,151033395,396172161,418835087,206614697,457074720,608773629,264116201,223275367,245993799,496965931,565076367,537794619,367113924,252100958,709127314,955740165,717448530,994033575,401632962,479531706,771835736,582097172,974725684,120159476,176935535,370842860,230417041,443706478,623894274,125138058,847667397,965552842,503036584,238729727,771366596,846308038,385665487,144000504,971774721,862963782,676308938,306748904,214162181,798645022,965147303,221783444,968638180,596118398,613689375,440199970,326609542,200407677,188180453,311644091,437387952,492429919,295268147,207642414,387827252,387204044,286727804,992211167,801906940,182465008,717529343,109496137,56346212,817066611,722093165,278338119,125519775,339560430,95097088,954781013,606165034,440895227,323946877,322883952,204899821,242128720,987880142,420098921,37923330,958225089,122221704,772855662,688733852,719240677,623219519,368476454,826744655,121794566,580055217,21017408,58334458,723669214,646117361,919270103,713591804,414167117,749255488,387744086,481431314,778935000,765824383,99751371,290751602,99100808,745302997,150845735,285271048,640059268,72688131,885179308,563557137,627116239,467926228,154038981,855078908,239847057,224974902,122188560,630966900,948703110,111762527,643314729,458317020,347201947,12260974,290362454,634790741,326860120,762906451,189110897,144685453,338136139,486192267,542560718,390360006,768623878,555237875,200618633,411646662,640902819,375122720,859840755,926440334,983901029,644361167,557768887,471531181,839019911,492236151,302466426,619067868,105040990,331785240,925654069,57844772,692034765,48498242,173578244,330210638,604566249,943490380,769799859,66924496,614397810,483134411,548440861,611172651,182043044,836488615,267112763,36899421,170177389,284124493,209747550,646096654,66428152,640009911,417026703,204258590,680746748,368803537,249840809,924665621,411817689,558003974,349799126,315013999,572137860,120833284,174118387,790884748,611641624,245313746,493071659,149624586,26381110,755522217,21853784,220111412,180053444,457340982,886562009,173724526,951327622,926270785,220543246,980743241,758691577,520939772,920838631,205931308,939756328,127209836,49345476,427346061,157072463,788168698,789011320,387408827,805584922,520587768,344833484,944402100,505371045,858708031,721939765,123885123,181672954,984166396,544325554,902088524,63682305,743280884,98282317,705755871,446819467,514887133,787448645,217889683,121213294,427078898,708917990,878460076,455497803,188688702,32845539,148203353,739564502,962381246,730353844,350822169,300896832,593976448,58898711,876865498,803005309,104990357,367204649,502881890,125815409,111510829,435176333,509278129,501575299,39102238,823765969,946483679,306248971,708800537,662005514,323003352,262757830,660921811,609033158,806699587,376532152,653905608,771074077,403966670,699051879,751148442,667523617,293892043,216700826,475523317,611175855,349750403,397122770,600991650,811873949,490600655,56091305,341631112,7687611,644789227,306289630,385652175,51610979,146413842,345076831,318654777,659542972,358176183,728989702,403151556,135326157,485219462,322725678,893250857,199042878,42398970,225008067,20707686,910835055,281018401,869115498,560751993,570799146,186189152,82012912,446308901,116332513,407369447,439749755,803681666,423959206,967926299,802286977,315528585,643645200,264777346,571374721,133368312,389173633,899240221,174467132,412823343,21849670,366777395,337371546,824215722,407041089,766446890,426284226,309134906,45999942,585261605,689507865,546107746,961896000,636500332,135133533,295001698,981121543,310622632,646664316,853242302,286506103,830315517,164079343,157584893,98928198,714493736,846792037,118567936,524596615,742292678,718601928,882939162,530683041,82716066,419412605,241084210,127563843,496286870,168923909,497701150,64884037,907404815,412595578,243295012,64070595,847374357,108407193,285510730,105702210,512649952,586758748,761333635,579114732,580055349,965005046,650791737,33850971,119466849,550688638,140298310,717293427,712850525,100756288,810543135,246124914,863189769,337306457,249857916,531007670,139659082,866771448,97020004,662357536,105708199,767804835,532480484,350672723,866120656,377313835,961461578,714816787,888420842,562365416,793124261,676364684,535627784,345437779,588558905,947122281,185010198,122699228,448688298,401386588,769858791,158355617,702201105,877622978,489166721,851037457,113428131,164322101,711992816,296377603,126433807,180450232,146837392,607717358,563604593,356043954,922055014,319182365,174193926,377458326,18507492,143952738,823582808,911429426,440611855,182016880,489811390,453582279,501061568,265897023,242575754,590437149,701707491,368361266,873217515,206915966,477560642,195945276,800255933,146328848,238086060,64124447,568639082,825639698,37835610,459285599,405655713,264184088,811118450,771538314,758568653,67288752,442678232,513740510,249153131,631804884,745225615,303368839,92091573,907775472,192991161,236563759,25776285,131890473,21132408,847102938,149488348,148778253,843822831,163190499,283941706,842734246,29230259,744428930,144384672,350981976,369149228,499015910,998276706,923782806,583341467,887420440,547851984,944178640,925745128,259534405,676669256,21008387,595626741,795993673,687487400,878932432,262993325,132916880,288019935,303500548,798425037,967539431,130866909,690889743,2256339,47921417,167151952,172000018,569932621,181260821,854724929,615055120,990557991,184519647,696726312,165633744,18611998,94903228,108907137,784609625,46356688,111175813,95565207,921448284,965725965,629304430,34924296,21198028,797483283,212669536,976406737,352447176,218531740,655441606,771430154,792985102,270095956,395491706,631203998,141112477,129095841,713050733,361092102,582080861,989296009,765944610,449622199,562260454,60008778,924177229,730633959,531523490,305988364,137309655,467422290,59364172,245102202,884904070,851933726,8498945,363027638,478241543,376816288,647176824,900548916,714776422,398586738,754134414,949513695,812482309,738765334,96373561,456583815,778396146,824708228,169241669,18513247,248953188,866649542,925833075,879168660,686521069,294429425,678005040,225667101,476975131,563022008,257669221,359816064,964823152,949198453,942487694,550498060,149911444,265842716,848412399,712541894,262004030,990279140,397094833,385436353,349417395,343346366,793922093,505807774,206700717,923970484,617836626,654647686,92296771,656850619,106462179,332302661,395494094,300769295,416862903,250124878,328061056,363399471,89342190,996824166,110025828,493324057,340271519,515307727,500719764,296308480,375927426,99937293,739326961,171481824,603207978,317624308,824560460,718392046,473621824,658907409,120298672,935512512,957477156,550497051,314368608,79592957,735904230,947458707,97663817,516391131,936369964,201869156,148854868,105101392,757013867,579559607,867993522,590082342,654916098,232871119,497801638,795057605,879031953,20536976,984651426,417681904,618101543,827509797,22145237,558974756,571472687,729136028,934819037,408198760,660348706,490104187,672922042,265997754,160698662,665096775,199606210,738727709,902511005,738641098,951490713,170465881,791853629,603824480,869243557,874763267,794397707,547857170,653126256,846302493,774655222,599648854,236412620,912437371,32727778,554859775,25994353,271780454,292906854,378285222,233557402,751320564,529931475,371953160,533539382,463597568,470933499,916267699,929447279,645679550,928931634,594083681,892537734,388048241,839147883,340716716,799113275,600857249,293924167,868198295,556913221,912657133,120917217,870176863,96911369,456964969,969501857,96227060,137468292,12325728,844016408,51534403,656437267,868256084,200485713,568923513,439337409,852619174,634116035,356331473,644072860,608828254,679830843,408364825,819994273,708409577,33289493,729955094,596908384,552676290,804063672,642210283,87969249,139856655,573837082,585204162,709919080,62019450,690340904,134375538,239873992,248897451,344866625,929545102,553885732,378658393,844885049,839814934,567317169,38067232,429000062,781481111,237895107,782073191,337473894,141506057,492977927,460288582,745195402,482110822,102004165,152293447,685882358,485879386,848080146,599355957,488608364,19053402,423318689,471333487,188166164,302107539,372743633,177700432,978971079,366701808,401596902,927509072,171361096,95127688,424301456,399542853,768237456,601860578,499990629,187805495,191279700,481600043,305424704,222429969,602590712,904063876,842352983,944208736,819657360,49463685,538026209,906352779,419674963,930518965,778141124,255585286,33994747,519787112,79986460,226108045,524476702,27656221,255579862,646238174,847099521,272965646,865493485,385727148,126314306,37843618,788938122,618363112,928198145,400264960,871653169,62240715,364773082,617467205,972975522,710291243,636653364,440799981,141210740,57867049,423646746,714493511,177625722,617783970,274650380,687499716,611743818,664745550,378779532,204366492,162895731,549949937,442481335,525455322,740477352,481424096,305714815,51047601,438699099,262169947,133720731,478955102,436063979,595492260,936083246,863122159,945175103,263539607,510732407,282342468,686191734,492765857,436266853,1776510,904247837,612920718,48007182,239884386,11204682,40517916,620896715,428051563,228035641,81480630,987941217,506734291,827420210,315533927,873321075,194012513,701591193,469021066,977224823,287810653,418116475,229914328,680362293,685870845,221377050,217438428,436976820,956610315,609746286,995059943,834130154,620333413,129424212,85123869,684341657,372232483,849850868,39008962,334692007,441172896,441332548,832399170,559399752,817223339,368656463,508150161,982500386,805756404,361093783,782516904,227697402,552864398,376648315,131219359,824310464,88378402,105093721,931111394,978424570,462045876,775812495,375392919,974899300,472606090,544185580,50284084,401130151,414301598,593630705,917370510,658630453,411490799,178655844,380745385,325174122,3082222,682403282,550267455,841077458,610783619,361233023,793693746,460107087,799438353,760107599,52044074,119468097,44303927,132339297,573405675,272388138,43419227,411058183,220220432,611745919,805350568,970746014,764062232,393882739,983284303,272507287,577270472,846617654,491819287,206119318,521558324,910021282,639310249,620356611,64059745,687961292,625991240,25907400,59892214,88040640,776895239,818968695,160783525,954869542,293693723,468987937,446082996,916942884,311292313,658592565,634756596,70358162,210975824,253238476,832920931,963525669,882776534,763829888,717755102,134562859,992220619,532109146,425961811,493677646,107786653,207818522,196066339,111474900,257644627,274562332,307727812,717836315,326865766,873090201,124492385,846032717,722268565,757127484,332116994,432329903,443274582,610441402,698528081,310044953,260046011,554112619,703742007,402774419,292306979,760774539,402066147,752998364,271696960,177313912,309878494,540104932,779043454,569185053,160233288,325474984,756301940,892820990,500053160,231334896,794606267,404678875,980732369,283755839,368386613,86296858,67762572,75074675,991932675,688983358,913104550,786957021,879078663,146575829,191767008,638549864,146213572,79225954,65949125,267399617,616601372,31296380,534786460,871570500,417735380,771785110,376385944,154401309,234734748,631694290,542886380,102226975,785537721,242796494,777292172,650777687,121632024,490436396,331066103,939668693,433716263,980024850,797678562,305812176,982021027,688100320,829876446,125002285,364614521,219921143,245211624,309829642,43455167,364536486,85737790,425628595,859372492,471784346,403385340,96571820,837277437,386811318,745690100,28585286,438708382,6635488,915376438,487080701,247830110,935059609,76336473,816549921,272103268,768416972,859456661,463819251,32608561,698776266,688501880,939605786,5192087,844383395,550698387,396220525,25232358,122324978,874042807,493690026,447201459,855822480,585455069,894491961,989605241,539114271,273794598,517458429,753561258,41854924,936179443,534463507,784177424,645763670,839030396,385673367,619137125,536106422};
int mod=1e9+7;
int main()
{
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
printf("%d\n",p[n]%mod);
}
return 0;
}
hdu 5 1001
【题意】就是求最小的b使得线性同余方程 a ≡ bx ( mod p)成立,其中a<b,p是质数,x<p。
【题解】根据线性同余方程可以推出一个不等式,0 < bx-kp = a < b , p/x < b/k < p/(x-1) , 如果左右边界同时向下取整是同一个数,那么整个式子同时减去这个整数然后整个式子取倒数,否则,那么就是取比左边界大的整数。
# include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL fz,fm;
LL p,x;
void faction(LL lz,LL lm,LL rz,LL rm,LL o)
{
LL l=lz/lm,r=rz/rm;
if(l!=r){
fz=l+1;
fm=1;
return ;
}
LL zl=lz,ml=lm,zr=rz,mr=rm;
lz=mr,lm=zr-o*mr,rz=ml,rm=zl-o*ml;
faction(lz,lm,rz,rm,lz/lm);
LL zf=fz,mf=fm;
fz=mf+zf*o,fm=zf;
return ;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%lld %lld",&p,&x);
LL l=p/x,r=p/(x-1);
LL b,k,a;
faction(p,x,p,x-1,l);
b=fz,k=fm;
a=b*x-k*p;
cout<<a<<"/"<<b<<endl;
}
return 0;
}
/*
3
11 7
998244353 554580197
998244353 998244352
*/
Editor HDU 4699
就是两个栈模拟一下,对顶栈,(1)对于当前的sum求和的时候下标直接用当前前面的一个栈的size代替就可以;(2)还要注意字符的读入空格会有影响要加getchar;(3)还有stack.pop()之前要注意判断stack是不是空的。
# include <bits/stdc++.h>
using namespace std;
stack<int> a,b;
const int MAXN=1e6+100;
const int INF=1e9;
int sum[MAXN],f[MAXN];
void init()
{
memset(sum,0,sizeof(sum));
memset(f,0,sizeof(f));
f[0]=-INF;
while(!a.empty()) a.pop();
while(!b.empty()) b.pop();
return ;
}
int main()
{
int Q;
while(~scanf("%d",&Q)){
init();
int l;
for(int i=1;i<=Q;i++){
char c;
getchar();
scanf("%c",&c);
if(c=='I'){
int x;
scanf("%d",&x);
a.push(x);
l=a.size();
sum[l]=sum[l-1]+x;
f[l]=max(f[l-1],sum[l]);
}else if(c=='D'){
if(!a.empty()){
a.pop();
}
}else if(c=='L'){
int x;
if(!a.empty()){
x=a.top();
a.pop();
b.push(x);
}
}else if(c=='R'){
int x;
if(!b.empty()){
x=b.top();
b.pop();
a.push(x);
l=a.size();
sum[l]=sum[l-1]+x;
f[l]=max(f[l-1],sum[l]);
}
}else if(c=='Q'){
int x;
scanf("%d",&x);
printf("%d\n",f[x]);
}
}
}
return 0;
}
/*
8
I 2
I -1
I 1
Q 3
L
D
R
Q 2
*/
ZZU 10.1 A
【题意】给定n个1e6范围内的数,然后选取k个数(其中k>=20),让这k个数或运算结果最大
【题解】1e6在2^20范围内,那么每次取一个数的时候去考虑一位是不是1就可以了,如果没有那么这一位为1肯定取不到,否则一定可以取到,那么直接把所有的数进行一次或运算就可以了
# include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5+100;
int a[MAXN];
int main()
{
int T;
freopen("looking.in","r",stdin);
scanf("%d",&T);
while(T--){
int k,n;
int cnt=0;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
cnt=cnt|a[i];
}
printf("%d\n",cnt);
}
return 0;
}